long getIndexSize() { return computeIndexSize(new File(core.getIndexDir())); }
public void run() { doFetch(paramsCopy); } }.start();
private Map<String, Long> getCheckSums(String[] files, File dir, Checksum checksum) { Map<String, Long> checksumMap = new HashMap<String, Long>(); if (files == null || files.length == 0) return checksumMap; for (String file : files) { File f = new File(dir, file); Long checkSumVal = getCheckSum(checksum, f); if (checkSumVal != null) checksumMap.put(file, checkSumVal); } return checksumMap; }
NamedList list = super.getStatistics(); if (core != null) { list.add("indexSize", readableSize(getIndexSize())); long[] versionGen = getIndexVersion(); list.add("indexVersion", versionGen[0]); list.add(GENERATION, versionGen[1]); list.add(SnapPuller.POLL_INTERVAL, snapPuller.getPollInterval()); list.add("isPollingDisabled", String.valueOf(isPollingDisabled())); list.add("isReplicating", String.valueOf(isReplicating())); long elapsed = getTimeElapsed(snapPuller); long val = SnapPuller.getTotalBytesDownloaded(snapPuller); if (elapsed > 0) { Properties props = loadReplicationProperties(); addVal(list, SnapPuller.PREVIOUS_CYCLE_TIME_TAKEN, props, Long.class); addVal(list, SnapPuller.INDEX_REPLICATED_AT, props, Date.class); addVal(list, SnapPuller.CONF_FILES_REPLICATED_AT, props, Date.class); addVal(list, SnapPuller.REPLICATION_FAILED_AT, props, Date.class); addVal(list, SnapPuller.TIMES_FAILED, props, Integer.class); addVal(list, SnapPuller.TIMES_INDEX_REPLICATED, props, Integer.class); addVal(list, SnapPuller.LAST_CYCLE_BYTES_DOWNLOADED, props, Long.class); addVal(list, SnapPuller.TIMES_CONFIG_REPLICATED, props, Integer.class); addVal(list, SnapPuller.CONF_FILES_REPLICATED, props, String.class); list.add(REPLICATE_AFTER, getReplicateAfterStrings()); list.add("replicationEnabled", String.valueOf(replicationEnabled.get()));
getFileStream(solrParams, rsp); } else if (command.equals(CMD_GET_FILE_LIST)) { getFileList(solrParams, rsp); } else if (command.equalsIgnoreCase(CMD_BACKUP)) { doSnapShoot(new ModifiableSolrParams(solrParams), rsp,req); rsp.add(STATUS, OK_STATUS); } else if (command.equalsIgnoreCase(CMD_FETCH_INDEX)) { getFileChecksum(solrParams, rsp); } else if (command.equals(CMD_SHOW_COMMITS)) { rsp.add(CMD_SHOW_COMMITS, getCommits()); } else if (command.equals(CMD_DETAILS)) { rsp.add(CMD_DETAILS, getReplicationDetails(solrParams.getBool("slave",true))); RequestHandlerUtils.addExperimentalFormatWarning(rsp); } else if (CMD_ENABLE_REPL.equalsIgnoreCase(command)) {
@SuppressWarnings("unchecked") public void inform(SolrCore core) { this.core = core; registerFileStreamResponseWriter(); registerCloseHook(); NamedList slave = (NamedList) initArgs.get("slave"); boolean enableSlave = slave != null && (null == slave.get("enable") || "true".equals(slave.get("enable"))); core.getUpdateHandler().registerOptimizeCallback(getEventListener(backupOnOptimize, replicateOnOptimize)); core.getUpdateHandler().registerCommitCallback(getEventListener(backupOnCommit, replicateOnCommit));
if(fileName.endsWith(".lock")) continue; File file = new File(core.getIndexDir(), fileName); Map<String, Object> fileMeta = getFileInfo(file); result.add(fileMeta); LOG.debug("Adding config files to list: " + includeConfFiles); rsp.add(CONF_FILES, getConfFileInfoFromCache(confFileNameAlias, confFileInfoCache));
List<Map<String, Object>> localFilesInfo = replicationHandler.getConfFileInfoFromCache(names, confFileInfoCache);
/** * Gets the checksum of a file */ private void getFileChecksum(SolrParams solrParams, SolrQueryResponse rsp) { Checksum checksum = new Adler32(); File dir = new File(core.getIndexDir()); rsp.add(CHECKSUM, getCheckSums(solrParams.getParams(FILE), dir, checksum)); dir = new File(core.getResourceLoader().getConfigDir()); rsp.add(CONF_CHECKSUM, getCheckSums(solrParams.getParams(CONF_FILE_SHORT), dir, checksum)); }
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("indexVersion", versionAndGeneration[0]); details.add(GENERATION, versionAndGeneration[1]); master.add(REPLICATE_AFTER, getReplicateAfterStrings()); master.add("replicationEnabled", String.valueOf(replicationEnabled.get())); Properties props = loadReplicationProperties(); try { NamedList<String> command = new NamedList<String>(); if (snapPuller.getNextScheduledExecTime() != null && !isPollingDisabled()) { slave.add(NEXT_EXECUTION_AT, new Date(snapPuller.getNextScheduledExecTime()).toString()); } else if (isPollingDisabled()) { slave.add(NEXT_EXECUTION_AT, "Polling disabled"); addVal(slave, SnapPuller.INDEX_REPLICATED_AT, props, Date.class); addVal(slave, SnapPuller.INDEX_REPLICATED_AT_LIST, props, List.class); addVal(slave, SnapPuller.REPLICATION_FAILED_AT_LIST, props, List.class); addVal(slave, SnapPuller.TIMES_INDEX_REPLICATED, props, Integer.class); addVal(slave, SnapPuller.CONF_FILES_REPLICATED, props, Integer.class); addVal(slave, SnapPuller.TIMES_CONFIG_REPLICATED, props, Integer.class); addVal(slave, SnapPuller.CONF_FILES_REPLICATED_AT, props, Integer.class); addVal(slave, SnapPuller.LAST_CYCLE_BYTES_DOWNLOADED, props, Long.class);
public void run() { if (pollDisabled.get()) { LOG.info("Poll disabled"); return; } try { executorStartTime = System.currentTimeMillis(); replicationHandler.doFetch(null); } catch (Exception e) { LOG.error("Exception in fetching index", e); } } };
/** * For configuration files, checksum of the file is included because, unlike index files, they may have same content * but different timestamps. * <p/> * The local conf files information is cached so that everytime it does not have to compute the checksum. The cache is * refreshed only if the lastModified of the file changes */ List<Map<String, Object>> getConfFileInfoFromCache(NamedList<String> nameAndAlias, final Map<String, FileInfo> confFileInfoCache) { List<Map<String, Object>> confFiles = new ArrayList<Map<String, Object>>(); synchronized (confFileInfoCache) { File confDir = new File(core.getResourceLoader().getConfigDir()); Checksum checksum = null; for (int i = 0; i < nameAndAlias.size(); i++) { String cf = nameAndAlias.getName(i); File f = new File(confDir, cf); if (!f.exists() || f.isDirectory()) continue; //must not happen FileInfo info = confFileInfoCache.get(cf); if (info == null || info.lastmodified != f.lastModified() || info.size != f.length()) { if (checksum == null) checksum = new Adler32(); info = new FileInfo(f.lastModified(), cf, f.length(), getCheckSum(checksum, f)); confFileInfoCache.put(cf, info); } Map<String, Object> m = info.getAsMap(); if (nameAndAlias.getVal(i) != null) m.put(ALIAS, nameAndAlias.getVal(i)); confFiles.add(m); } } return confFiles; }