You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-commits@lucene.apache.org by sh...@apache.org on 2009/02/12 14:25:26 UTC
svn commit: r743729 - in /lucene/solr/trunk: CHANGES.txt
src/java/org/apache/solr/handler/ReplicationHandler.java
src/webapp/web/admin/replication/header.jsp
src/webapp/web/admin/replication/index.jsp
Author: shalin
Date: Thu Feb 12 13:25:25 2009
New Revision: 743729
URL: http://svn.apache.org/viewvc?rev=743729&view=rev
Log:
SOLR-1015 -- Incomplete information in replication admin page and http command response when server is both master and slave i.e. when server is a repeater
Modified:
lucene/solr/trunk/CHANGES.txt
lucene/solr/trunk/src/java/org/apache/solr/handler/ReplicationHandler.java
lucene/solr/trunk/src/webapp/web/admin/replication/header.jsp
lucene/solr/trunk/src/webapp/web/admin/replication/index.jsp
Modified: lucene/solr/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/CHANGES.txt?rev=743729&r1=743728&r2=743729&view=diff
==============================================================================
--- lucene/solr/trunk/CHANGES.txt (original)
+++ lucene/solr/trunk/CHANGES.txt Thu Feb 12 13:25:25 2009
@@ -258,6 +258,9 @@
30. SOLR-1016: HTTP 503 error changes 500 in SolrCore (koji)
+31. SOLR-1015: Incomplete information in replication admin page and http command response when server
+ is both master and slave i.e. when server is a repeater (Akshay Ukey via shalin)
+
Other Changes
----------------------
Modified: lucene/solr/trunk/src/java/org/apache/solr/handler/ReplicationHandler.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/handler/ReplicationHandler.java?rev=743729&r1=743728&r2=743729&view=diff
==============================================================================
--- lucene/solr/trunk/src/java/org/apache/solr/handler/ReplicationHandler.java (original)
+++ lucene/solr/trunk/src/java/org/apache/solr/handler/ReplicationHandler.java Thu Feb 12 13:25:25 2009
@@ -82,6 +82,8 @@
private boolean replicateOnCommit = false;
+ private boolean replicateOnStart = false;
+
private int numTimesReplicated = 0;
private final Map<String, FileInfo> confFileInfoCache = new HashMap<String, FileInfo>();
@@ -139,7 +141,8 @@
} else if (command.equals(CMD_SHOW_COMMITS)) {
rsp.add(CMD_SHOW_COMMITS, getCommits());
} else if (command.equals(CMD_DETAILS)) {
- getReplicationDetails(rsp);
+ rsp.add(CMD_DETAILS, getReplicationDetails());
+ RequestHandlerUtils.addExperimentalFormatWarning(rsp);
}
}
@@ -443,11 +446,12 @@
if (core != null) {
list.add("indexSize", readableSize(getIndexSize()));
long[] versionGen = getIndexVersion();
- list.add(CMD_INDEX_VERSION, versionGen[0]);
+ list.add("indexVersion", versionGen[0]);
list.add(GENERATION, versionGen[1]);
list.add("indexPath", core.getIndexDir());
list.add("isMaster", String.valueOf(isMaster));
+ list.add("isSlave", String.valueOf(isSlave));
SnapPuller snapPuller = tempSnapPuller;
if (snapPuller != null) {
@@ -461,10 +465,16 @@
if (isMaster) {
if (includeConfFiles != null)
list.add("confFilesToReplicate", includeConfFiles);
+ String replicateAfterString="";
if (replicateOnCommit)
- list.add(REPLICATE_AFTER, "commit");
+ replicateAfterString += "commit, ";
if (replicateOnOptimize)
- list.add(REPLICATE_AFTER, "optimize");
+ replicateAfterString += "optimize, ";
+ if(replicateOnStart)
+ replicateAfterString += "startup, ";
+ if(replicateAfterString.lastIndexOf(',') > -1)
+ replicateAfterString = replicateAfterString.substring(0, replicateAfterString.lastIndexOf(','));
+ list.add(REPLICATE_AFTER, replicateAfterString);
}
}
return list;
@@ -473,23 +483,44 @@
/**
* Used for showing statistics and progress information.
*/
- void getReplicationDetails(SolrQueryResponse resp) {
+ NamedList<Object> getReplicationDetails() {
String timeLastReplicated = "", confFilesReplicated = "", confFilesReplicatedTime = "", timesIndexReplicated = "", timesConfigReplicated = "";
NamedList<Object> details = new SimpleOrderedMap<Object>();
+ NamedList<Object> master = new SimpleOrderedMap<Object>();
+ NamedList<Object> slave = new SimpleOrderedMap<Object>();
FileInputStream inFile = null;
details.add("indexSize", readableSize(getIndexSize()));
details.add("indexPath", core.getIndexDir());
details.add(CMD_SHOW_COMMITS, getCommits());
details.add("isMaster", String.valueOf(isMaster));
+ details.add("isSlave", String.valueOf(isSlave));
long[] versionAndGeneration = getIndexVersion();
- details.add(CMD_INDEX_VERSION, versionAndGeneration[0]);
+ details.add("indexVersion", versionAndGeneration[0]);
details.add(GENERATION, versionAndGeneration[1]);
+
IndexCommit commit = indexCommitPoint; // make a copy so it won't change
+
+ if (isMaster) {
+ if (includeConfFiles != null)
+ master.add(CONF_FILES, includeConfFiles);
+ String replicateAfterString="";
+ if (replicateOnCommit)
+ replicateAfterString += "commit, ";
+ if (replicateOnOptimize)
+ replicateAfterString += "optimize, ";
+ if(replicateOnStart)
+ replicateAfterString += "startup, ";
+ if(replicateAfterString.lastIndexOf(',') > -1)
+ replicateAfterString = replicateAfterString.substring(0, replicateAfterString.lastIndexOf(','));
+ master.add(REPLICATE_AFTER, replicateAfterString);
+ }
+
if (isMaster && commit != null) {
- details.add("replicatable" + CMD_INDEX_VERSION, commit.getVersion());
- details.add("replicatable" + GENERATION, commit.getGeneration());
+ master.add("replicatableIndexVersion", commit.getVersion());
+ master.add("replicatableGeneration", commit.getGeneration());
}
+
SnapPuller snapPuller = tempSnapPuller;
if (snapPuller != null) {
try {
@@ -515,36 +546,36 @@
}
try {
NamedList nl = snapPuller.getCommandResponse(CMD_DETAILS);
- details.add("masterDetails", nl.get(CMD_DETAILS));
+ slave.add("masterDetails", nl.get(CMD_DETAILS));
} catch (IOException e) {
LOG.warn("Exception while invoking a 'details' method on master ", e);
}
- details.add(MASTER_URL, snapPuller.getMasterUrl());
+ slave.add(MASTER_URL, snapPuller.getMasterUrl());
if (snapPuller.getPollInterval() != null) {
- details.add(SnapPuller.POLL_INTERVAL, snapPuller.getPollInterval());
+ slave.add(SnapPuller.POLL_INTERVAL, snapPuller.getPollInterval());
}
if (snapPuller.getNextScheduledExecTime() != null && !isPollingDisabled()) {
Date d = new Date(snapPuller.getNextScheduledExecTime());
- details.add("nextExecutionAt", d.toString());
+ slave.add("nextExecutionAt", d.toString());
} else if (isPollingDisabled()) {
- details.add("nextExecutionAt", "Polling disabled");
+ slave.add("nextExecutionAt", "Polling disabled");
} else
- details.add("nextExecutionAt", "");
+ slave.add("nextExecutionAt", "");
if (timeLastReplicated != null && timeLastReplicated.length() > 0) {
Date d = new Date(Long.valueOf(timeLastReplicated));
- details.add("indexReplicatedAt", d.toString());
+ slave.add("indexReplicatedAt", d.toString());
} else {
- details.add("indexReplicatedAt", "");
+ slave.add("indexReplicatedAt", "");
}
- details.add("timesIndexReplicated", timesIndexReplicated);
- details.add("confFilesReplicated", confFilesReplicated);
- details.add("timesConfigReplicated", timesConfigReplicated);
+ slave.add("timesIndexReplicated", timesIndexReplicated);
+ slave.add("confFilesReplicated", confFilesReplicated);
+ slave.add("timesConfigReplicated", timesConfigReplicated);
if (confFilesReplicatedTime != null && confFilesReplicatedTime.length() > 0) {
Date d = new Date(Long.valueOf(confFilesReplicatedTime));
- details.add("confFilesReplicatedAt", d.toString());
+ slave.add("confFilesReplicatedAt", d.toString());
} else {
- details.add("confFilesReplicatedAt", confFilesReplicatedTime);
+ slave.add("confFilesReplicatedAt", confFilesReplicatedTime);
}
try {
@@ -563,9 +594,9 @@
bytesToDownload += (Long) file.get(SIZE);
}
- details.add("filesToDownload", filesToDownload.toString());
- details.add("numFilesToDownload", String.valueOf(filesToDownload.size()));
- details.add("bytesToDownload", readableSize(bytesToDownload));
+ slave.add("filesToDownload", filesToDownload.toString());
+ slave.add("numFilesToDownload", String.valueOf(filesToDownload.size()));
+ slave.add("bytesToDownload", readableSize(bytesToDownload));
long bytesDownloaded = 0;
List<String> filesDownloaded = new ArrayList<String>();
@@ -580,8 +611,8 @@
bytesDownloaded += (Long) file.get(SIZE);
}
- details.add("filesDownloaded", filesDownloaded.toString());
- details.add("numFilesDownloaded", String.valueOf(filesDownloaded.size()));
+ slave.add("filesDownloaded", filesDownloaded.toString());
+ slave.add("numFilesDownloaded", String.valueOf(filesDownloaded.size()));
Map<String, Object> currentFile = snapPuller.getCurrentFile();
String currFile = null;
@@ -605,9 +636,9 @@
timeElapsed = (System.currentTimeMillis() - snapPuller.getReplicationStartTime()) / 1000;
}
if (replicationStartTime != null) {
- details.add("replicationStartTime", replicationStartTime.toString());
+ slave.add("replicationStartTime", replicationStartTime.toString());
}
- details.add("timeElapsed", String.valueOf(timeElapsed) + "s");
+ slave.add("timeElapsed", String.valueOf(timeElapsed) + "s");
if (bytesDownloaded > 0)
estimatedTimeRemaining = ((bytesToDownload - bytesDownloaded) * timeElapsed) / bytesDownloaded;
@@ -618,31 +649,25 @@
if (timeElapsed > 0)
downloadSpeed = (bytesDownloaded / timeElapsed);
if (currFile != null)
- details.add("currentFile", currFile);
- details.add("currentFileSize", readableSize(currFileSize));
- details.add("currentFileSizeDownloaded", readableSize(currFileSizeDownloaded));
- details.add("currentFileSizePercent", String.valueOf(percentDownloaded));
- details.add("bytesDownloaded", readableSize(bytesDownloaded));
- details.add("totalPercent", String.valueOf(totalPercent));
- details.add("timeRemaining", String.valueOf(estimatedTimeRemaining) + "s");
- details.add("downloadSpeed", readableSize(downloadSpeed));
- details.add("isPollingDisabled", String.valueOf(isPollingDisabled()));
- details.add("isReplicating", String.valueOf(isReplicating()));
+ slave.add("currentFile", currFile);
+ slave.add("currentFileSize", readableSize(currFileSize));
+ slave.add("currentFileSizeDownloaded", readableSize(currFileSizeDownloaded));
+ slave.add("currentFileSizePercent", String.valueOf(percentDownloaded));
+ slave.add("bytesDownloaded", readableSize(bytesDownloaded));
+ slave.add("totalPercent", String.valueOf(totalPercent));
+ slave.add("timeRemaining", String.valueOf(estimatedTimeRemaining) + "s");
+ slave.add("downloadSpeed", readableSize(downloadSpeed));
+ slave.add("isPollingDisabled", String.valueOf(isPollingDisabled()));
+ slave.add("isReplicating", String.valueOf(isReplicating()));
} catch (Exception e) {
LOG.error("Exception while writing details: ", e);
}
}
-
- if (isMaster) {
- if (includeConfFiles != null)
- details.add(CONF_FILES, includeConfFiles);
- if (replicateOnCommit)
- details.add(REPLICATE_AFTER, "commit");
- if (replicateOnOptimize)
- details.add(REPLICATE_AFTER, "optimize");
- }
-
- resp.add(CMD_DETAILS, details);
+ if(isMaster)
+ details.add("master", master);
+ if(isSlave)
+ details.add("slave", slave);
+ return details;
}
@SuppressWarnings("unchecked")
@@ -683,6 +708,7 @@
core.getUpdateHandler().registerCommitCallback(getEventListener(snapshotOnCommit, replicateOnCommit));
}
if (replicateAfter.contains("startup")) {
+ replicateOnStart = true;
RefCounted<SolrIndexSearcher> s = core.getNewestSearcher(false);
try {
if (core.getUpdateHandler() instanceof DirectUpdateHandler2) {
Modified: lucene/solr/trunk/src/webapp/web/admin/replication/header.jsp
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/webapp/web/admin/replication/header.jsp?rev=743729&r1=743728&r2=743729&view=diff
==============================================================================
--- lucene/solr/trunk/src/webapp/web/admin/replication/header.jsp (original)
+++ lucene/solr/trunk/src/webapp/web/admin/replication/header.jsp Thu Feb 12 13:25:25 2009
@@ -55,12 +55,11 @@
%>
<%
-
final SolrRequestHandler rh = core.getRequestHandler("/replication");
NamedList namedlist = executeCommand("details",core,rh);
NamedList detailsMap = (NamedList)namedlist.get("details");
-
-if("false".equals((String)detailsMap.get("isMaster"))){
+if(detailsMap != null)
+if("true".equals((String)detailsMap.get("isSlave"))){
%>
<meta http-equiv="refresh" content="2"/>
<%}%>
@@ -70,11 +69,16 @@
<body>
<a href=".."><img border="0" align="right" height="78" width="142" src="../solr_small.png" alt="Solr"></a>
<h1>Solr replication (<%= collectionName %>)
+
<%
-if("true".equals((String)detailsMap.get("isMaster")))
- out.println(" Master");
- else
- out.println(" Slave");
+if(detailsMap != null){
+ if( "true".equals(detailsMap.get("isMaster")) && "true".equals(detailsMap.get("isSlave")))
+ out.println(" Master & Slave");
+ else if("true".equals(detailsMap.get("isMaster")))
+ out.println(" Master");
+ else if("true".equals(detailsMap.get("isSlave")))
+ out.println(" Slave");
+}
%></h1>
<%= hostname %>:<%= port %><br/>
Modified: lucene/solr/trunk/src/webapp/web/admin/replication/index.jsp
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/webapp/web/admin/replication/index.jsp?rev=743729&r1=743728&r2=743729&view=diff
==============================================================================
--- lucene/solr/trunk/src/webapp/web/admin/replication/index.jsp (original)
+++ lucene/solr/trunk/src/webapp/web/admin/replication/index.jsp Thu Feb 12 13:25:25 2009
@@ -19,8 +19,7 @@
<%-- do a verbatim include so we can use the local vars --%>
-<%@include file="header.jsp"
- %>
+<%@include file="header.jsp"%>
<br clear="all">
<table>
@@ -31,30 +30,36 @@
%>
<%
- if ("false".equals(detailsMap.get("isMaster")))
- if (detailsMap != null) {%>
+NamedList slave = null, master = null;
+if (detailsMap != null)
+ if ("true".equals(detailsMap.get("isSlave")))
+ if(detailsMap.get("slave") != null){
+ slave = (NamedList)detailsMap.get("slave");%>
<tr>
<td>
<strong>Master</strong>
</td>
<td>
<%
- out.println((String) detailsMap.get("masterUrl"));
+ out.println((String) slave.get("masterUrl"));
%>
</td>
</tr>
<tr>
<%
- NamedList nl = (NamedList) detailsMap.get("masterDetails");
+ NamedList nl = (NamedList) slave.get("masterDetails");
if (nl != null) {
- long masterVersion = (Long) nl.get("indexversion");
+ long masterVersion = (Long) nl.get("indexVersion");
long masterGeneration = (Long) nl.get("generation");
long replicatableMasterVer = 0, replicatableMasterGen = 0;
- if (nl.get("replicatableindexversion") != null)
- replicatableMasterVer = (Long) nl.get("replicatableindexversion");
- if (nl.get("replicatablegeneration") != null)
- replicatableMasterGen = (Long) nl.get("replicatablegeneration");
+ nl = (NamedList) nl.get("master");
+ if(nl != null){
+ if (nl.get("replicatableindexversion") != null)
+ replicatableMasterVer = (Long) nl.get("replicatableindexversion");
+ if (nl.get("replicatablegeneration") != null)
+ replicatableMasterGen = (Long) nl.get("replicatablegeneration");
+ }
%>
<td>
</td>
@@ -75,7 +80,7 @@
</td>
<td>
<%
- out.println((String) detailsMap.get("pollInterval"));
+ out.println((String) slave.get("pollInterval"));
%>
</td>
</tr>
@@ -88,7 +93,7 @@
<td>
<%
if (detailsMap != null)
- out.println("Index Version: " + detailsMap.get("indexversion") + ", Generation: " + detailsMap.get("generation"));
+ out.println("Index Version: " + detailsMap.get("indexVersion") + ", Generation: " + detailsMap.get("generation"));
%>
</td>
</tr>
@@ -113,34 +118,36 @@
</tr>
<%
- if ("true".equals(detailsMap.get("isMaster")))
- if (detailsMap != null) {
+ if (detailsMap != null)
+ if ("true".equals(detailsMap.get("isMaster")))
+ if(detailsMap.get("master") != null){
+ master = (NamedList) detailsMap.get("master");
%>
<tr>
<td></td>
<td>
- <%out.println("Config Files To Replicate: " + detailsMap.get("confFiles"));%>
+ <%out.println("Config Files To Replicate: " + master.get("confFiles"));%>
</td>
</tr>
<tr>
<td></td>
<td>
- <%out.println("Trigger Replication On: " + detailsMap.get("replicateAfter")); %>
+ <%out.println("Trigger Replication On: " + master.get("replicateAfter")); %>
</td>
</tr>
<%}%>
<%
- if ("false".equals(detailsMap.get("isMaster")))
- if (detailsMap != null) {%>
+ if ("true".equals(detailsMap.get("isSlave")))
+ if (slave != null) {%>
<tr>
<td>
</td>
<td>
<%
- out.println("Times Replicated Since Startup: " + detailsMap.get("timesIndexReplicated"));
+ out.println("Times Replicated Since Startup: " + slave.get("timesIndexReplicated"));
%>
</td>
</tr>
@@ -150,7 +157,7 @@
</td>
<td>
<%
- out.println("Previous Replication Done At: " + detailsMap.get("indexReplicatedAt"));
+ out.println("Previous Replication Done At: " + slave.get("indexReplicatedAt"));
%>
</td>
</tr>
@@ -160,7 +167,7 @@
</td>
<td>
<%
- out.println("Config Files Replicated At: " + detailsMap.get("confFilesReplicatedAt"));
+ out.println("Config Files Replicated At: " + slave.get("confFilesReplicatedAt"));
%>
</td>
</tr>
@@ -170,7 +177,7 @@
</td>
<td>
<%
- out.println("Config Files Replicated: " + detailsMap.get("confFilesReplicated"));
+ out.println("Config Files Replicated: " + slave.get("confFilesReplicated"));
%>
</td>
</tr>
@@ -180,7 +187,7 @@
</td>
<td>
<%
- out.println("Times Config Files Replicated Since Startup: " + detailsMap.get("timesConfigReplicated"));
+ out.println("Times Config Files Replicated Since Startup: " + slave.get("timesConfigReplicated"));
%>
</td>
</tr>
@@ -190,27 +197,31 @@
</td>
<td>
<%
- if (detailsMap.get("nextExecutionAt") != null)
- if (detailsMap.get("nextExecutionAt") != "")
- out.println("Next Replication Cycle At: " + detailsMap.get("nextExecutionAt"));
- else if ("true".equals(detailsMap.get("isPollingDisabled")))
+ if (slave.get("nextExecutionAt") != null)
+ if (slave.get("nextExecutionAt") != "")
+ out.println("Next Replication Cycle At: " + slave.get("nextExecutionAt"));
+ else if ("true".equals(slave.get("isPollingDisabled")))
out.println("Next Replication Cycle At: Polling disabled.");
else {
- NamedList nl1 = (NamedList) detailsMap.get("masterDetails");
- out.println("Next Replication Cycle At: After " + nl1.get("replicateAfter") + " on master.");
+ NamedList nl1 = (NamedList) slave.get("masterDetails");
+ if(nl1 != null){
+ NamedList nl2 = (NamedList) nl1.get("master");
+ if(nl2 != null)
+ out.println("Next Replication Cycle At: After " + nl2.get("replicateAfter") + " on master.");
+ }
}
%>
</td>
</tr>
<%
- if ("true".equals(detailsMap.get("isReplicating"))) {
+ if ("true".equals(slave.get("isReplicating"))) {
%>
<tr>
<td><strong>Current Replication Status</strong>
<td>
- <%out.println("Start Time: " + detailsMap.get("replicationStartTime"));%>
+ <%out.println("Start Time: " + slave.get("replicationStartTime"));%>
</td>
</tr>
@@ -218,7 +229,7 @@
<td></td>
<td>
<%
- out.println("Files Downloaded: " + detailsMap.get("numFilesDownloaded") + " / " + detailsMap.get("numFilesToDownload"));%>
+ out.println("Files Downloaded: " + slave.get("numFilesDownloaded") + " / " + slave.get("numFilesToDownload"));%>
</td>
</tr>
@@ -226,7 +237,7 @@
<td></td>
<td>
<%
- out.println("Downloaded: " + detailsMap.get("bytesDownloaded") + " / " + detailsMap.get("bytesToDownload") + " [" + detailsMap.get("totalPercent") + "%]");%>
+ out.println("Downloaded: " + slave.get("bytesDownloaded") + " / " + slave.get("bytesToDownload") + " [" + slave.get("totalPercent") + "%]");%>
</td>
</tr>
@@ -234,7 +245,7 @@
<td></td>
<td>
<%
- out.println("Downloading File: " + detailsMap.get("currentFile") + ", Downloaded: " + detailsMap.get("currentFileSizeDownloaded") + " / " + detailsMap.get("currentFileSize") + " [" + detailsMap.get("currentFileSizePercent") + "%]");%>
+ out.println("Downloading File: " + slave.get("currentFile") + ", Downloaded: " + slave.get("currentFileSizeDownloaded") + " / " + slave.get("currentFileSize") + " [" + slave.get("currentFileSizePercent") + "%]");%>
</td>
</tr>
@@ -242,7 +253,7 @@
<td></td>
<td>
<%
- out.println("Time Elapsed: " + detailsMap.get("timeElapsed") + ", Estimated Time Remaining: " + detailsMap.get("timeRemaining") + ", Speed: " + detailsMap.get("downloadSpeed") + "/s");%>
+ out.println("Time Elapsed: " + slave.get("timeElapsed") + ", Estimated Time Remaining: " + slave.get("timeRemaining") + ", Speed: " + slave.get("downloadSpeed") + "/s");%>
</td>
</tr>
<%}%>
@@ -257,7 +268,8 @@
executeCommand("disablepoll", core, rh);
else if (pollVal.equals("enable"))
executeCommand("enablepoll", core, rh);
- if ("false".equals(detailsMap.get("isPollingDisabled"))) {
+ if(slave != null)
+ if ("false".equals(slave.get("isPollingDisabled"))) {
%>
<form name=polling method="POST" action="./index.jsp" accept-charset="UTF-8">
@@ -267,7 +279,8 @@
<%}%>
<%
- if ("true".equals(detailsMap.get("isPollingDisabled"))) {
+ if(slave != null)
+ if ("true".equals(slave.get("isPollingDisabled"))) {
%>
<form name=polling method="POST" action="./index.jsp" accept-charset="UTF-8">
@@ -289,7 +302,8 @@
<input name="replicateButton" class="stdbutton" type="submit" value="Replicate Now">
</form>
<%
- if ("true".equals(detailsMap.get("isReplicating"))) {
+ if(slave != null)
+ if ("true".equals(slave.get("isReplicating"))) {
%>
<script type="text/javascript">
document["replicate"].replicateButton.disabled = true;