From 1be67d9ab6db63c804677d4c2d6dbdc94cc91967 Mon Sep 17 00:00:00 2001 From: sixcooler Date: Mon, 14 Dec 2015 21:33:27 +0100 Subject: [PATCH] CachedSolrConnector was replaced by ConcurrentUpdateSolrConnector years ago - time to let it go Commented out unused table of cache-objects --- htroot/PerformanceMemory_p.html | 33 +- htroot/PerformanceMemory_p.java | 107 +++--- .../solr/connector/CachedSolrConnector.java | 313 ------------------ 3 files changed, 49 insertions(+), 404 deletions(-) delete mode 100644 source/net/yacy/cora/federate/solr/connector/CachedSolrConnector.java diff --git a/htroot/PerformanceMemory_p.html b/htroot/PerformanceMemory_p.html index 43f150785..1f655361b 100644 --- a/htroot/PerformanceMemory_p.html +++ b/htroot/PerformanceMemory_p.html @@ -158,6 +158,7 @@ + + Flushes #{ObjectList}# @@ -206,13 +207,13 @@ #[objectMissCacheWriteUnique]# #[objectMissCacheWriteDouble]# #[objectMissCacheDeletes]# - + #[objectMissCacheFlushes]# #{/ObjectList}# Total Mem: #[objectHitCacheTotalMem]# MB (hit), #[objectMissCacheTotalMem]# MB (miss); Stop Grow when less than #[objectCacheStopGrow]# MB available left; Start Shrink when less than #[objectCacheStartShrink]# MB availabe left - + -->

Other Caching Structures:

@@ -225,32 +226,6 @@ Insert Delete - DNSCache/Hit #[namecacheHit.size]# diff --git a/htroot/PerformanceMemory_p.java b/htroot/PerformanceMemory_p.java index 7558fd2f5..50535d2ea 100644 --- a/htroot/PerformanceMemory_p.java +++ b/htroot/PerformanceMemory_p.java @@ -36,7 +36,6 @@ import org.apache.solr.search.SolrCache; import net.yacy.cora.protocol.Domains; import net.yacy.cora.protocol.RequestHeader; import net.yacy.cora.util.ConcurrentLog; -import net.yacy.kelondro.index.Cache; import net.yacy.kelondro.index.RAMIndex; import net.yacy.kelondro.table.Table; import net.yacy.kelondro.util.Formatter; @@ -183,67 +182,51 @@ public class PerformanceMemory_p { prop.put("indexcache", c); prop.putNum("indexcacheTotalMem", totalhitmem / (1024d * 1024d)); - // write object cache table - i = Cache.filenames(); - c = 0; - long missmem, totalmissmem = 0; - totalhitmem = 0; - Map mapy; - while (i.hasNext()) { - filename = i.next(); - mapy = Cache.memoryStats(filename); - prop.put("ObjectList_" + c + "_objectCachePath", ((p = filename.indexOf("DATA",0)) < 0) ? filename : filename.substring(p)); - - // hit cache - hitmem = Long.parseLong(mapy.get(Cache.StatKeys.objectHitMem)); - totalhitmem += hitmem; - prop.put("ObjectList_" + c + "_objectHitChunkSize", mapy.get(Cache.StatKeys.objectHitChunkSize)); - prop.putNum("ObjectList_" + c + "_objectHitCacheCount", mapy.get(Cache.StatKeys.objectHitCacheCount)); - prop.put("ObjectList_" + c + "_objectHitCacheMem", Formatter.bytesToString(hitmem)); - prop.putNum("ObjectList_" + c + "_objectHitCacheReadHit", mapy.get(Cache.StatKeys.objectHitCacheReadHit)); - prop.putNum("ObjectList_" + c + "_objectHitCacheReadMiss", mapy.get(Cache.StatKeys.objectHitCacheReadMiss)); - prop.putNum("ObjectList_" + c + "_objectHitCacheWriteUnique", mapy.get(Cache.StatKeys.objectHitCacheWriteUnique)); - prop.putNum("ObjectList_" + c + "_objectHitCacheWriteDouble", mapy.get(Cache.StatKeys.objectHitCacheWriteDouble)); - prop.putNum("ObjectList_" + c + "_objectHitCacheDeletes", mapy.get(Cache.StatKeys.objectHitCacheDeletes)); - prop.putNum("ObjectList_" + c + "_objectHitCacheFlushes", mapy.get(Cache.StatKeys.objectHitCacheFlushes)); - - // miss cache - missmem = Long.parseLong(mapy.get(Cache.StatKeys.objectMissMem)); - totalmissmem += missmem; - prop.put("ObjectList_" + c + "_objectMissChunkSize", mapy.get(Cache.StatKeys.objectMissChunkSize)); - prop.putNum("ObjectList_" + c + "_objectMissCacheCount", mapy.get(Cache.StatKeys.objectMissCacheCount)); - prop.putHTML("ObjectList_" + c + "_objectMissCacheMem", Formatter.bytesToString(missmem)); - prop.putNum("ObjectList_" + c + "_objectMissCacheReadHit", mapy.get(Cache.StatKeys.objectMissCacheReadHit)); - prop.putNum("ObjectList_" + c + "_objectMissCacheReadMiss", mapy.get(Cache.StatKeys.objectMissCacheReadMiss)); - prop.putNum("ObjectList_" + c + "_objectMissCacheWriteUnique", mapy.get(Cache.StatKeys.objectMissCacheWriteUnique)); - prop.putNum("ObjectList_" + c + "_objectMissCacheWriteDouble", mapy.get(Cache.StatKeys.objectMissCacheWriteDouble)); - prop.putNum("ObjectList_" + c + "_objectMissCacheDeletes", mapy.get(Cache.StatKeys.objectMissCacheDeletes)); - //prop.put("ObjectList_" + c + "_objectMissCacheFlushes", mapy.get(Cache.StatKeys.objectMissCacheFlushes)); - - c++; - } - prop.put("ObjectList", c); - prop.putNum("objectCacheStopGrow", Cache.getMemStopGrow() / (1024d * 1024d)); - prop.putNum("objectCacheStartShrink", Cache.getMemStartShrink() / (1024d * 1024d)); - prop.putNum("objectHitCacheTotalMem", totalhitmem / (1024d * 1024d)); - prop.putNum("objectMissCacheTotalMem", totalmissmem / (1024d * 1024d)); - - // other caching structures -// final CachedSolrConnector solr = (CachedSolrConnector) Switchboard.getSwitchboard().index.fulltext().getDefaultConnector(); -// prop.putNum("solrcacheHit.size", solr.nameCacheHitSize()); -// prop.putNum("solrcacheHit.Hit", solr.hitCache_Hit); -// prop.putNum("solrcacheHit.Miss", solr.hitCache_Miss); -// prop.putNum("solrcacheHit.Insert", solr.hitCache_Insert); -// -// prop.putNum("solrcacheMiss.size", solr.nameCacheMissSize()); -// prop.putNum("solrcacheMiss.Hit", solr.missCache_Hit); -// prop.putNum("solrcacheMiss.Miss", solr.missCache_Miss); -// prop.putNum("solrcacheMiss.Insert", solr.missCache_Insert); -// -// prop.putNum("solrcacheDocument.size", solr.nameCacheDocumentSize()); -// prop.putNum("solrcacheDocument.Hit", solr.documentCache_Hit); -// prop.putNum("solrcacheDocument.Miss", solr.documentCache_Miss); -// prop.putNum("solrcacheDocument.Insert", solr.documentCache_Insert); +// this cache table wasn't used for years +// // write object cache table +// i = Cache.filenames(); +// c = 0; +// long missmem, totalmissmem = 0; +// totalhitmem = 0; +// Map mapy; +// while (i.hasNext()) { +// filename = i.next(); +// mapy = Cache.memoryStats(filename); +// prop.put("ObjectList_" + c + "_objectCachePath", ((p = filename.indexOf("DATA",0)) < 0) ? filename : filename.substring(p)); +// +// // hit cache +// hitmem = Long.parseLong(mapy.get(Cache.StatKeys.objectHitMem)); +// totalhitmem += hitmem; +// prop.put("ObjectList_" + c + "_objectHitChunkSize", mapy.get(Cache.StatKeys.objectHitChunkSize)); +// prop.putNum("ObjectList_" + c + "_objectHitCacheCount", mapy.get(Cache.StatKeys.objectHitCacheCount)); +// prop.put("ObjectList_" + c + "_objectHitCacheMem", Formatter.bytesToString(hitmem)); +// prop.putNum("ObjectList_" + c + "_objectHitCacheReadHit", mapy.get(Cache.StatKeys.objectHitCacheReadHit)); +// prop.putNum("ObjectList_" + c + "_objectHitCacheReadMiss", mapy.get(Cache.StatKeys.objectHitCacheReadMiss)); +// prop.putNum("ObjectList_" + c + "_objectHitCacheWriteUnique", mapy.get(Cache.StatKeys.objectHitCacheWriteUnique)); +// prop.putNum("ObjectList_" + c + "_objectHitCacheWriteDouble", mapy.get(Cache.StatKeys.objectHitCacheWriteDouble)); +// prop.putNum("ObjectList_" + c + "_objectHitCacheDeletes", mapy.get(Cache.StatKeys.objectHitCacheDeletes)); +// prop.putNum("ObjectList_" + c + "_objectHitCacheFlushes", mapy.get(Cache.StatKeys.objectHitCacheFlushes)); +// +// // miss cache +// missmem = Long.parseLong(mapy.get(Cache.StatKeys.objectMissMem)); +// totalmissmem += missmem; +// prop.put("ObjectList_" + c + "_objectMissChunkSize", mapy.get(Cache.StatKeys.objectMissChunkSize)); +// prop.putNum("ObjectList_" + c + "_objectMissCacheCount", mapy.get(Cache.StatKeys.objectMissCacheCount)); +// prop.putHTML("ObjectList_" + c + "_objectMissCacheMem", Formatter.bytesToString(missmem)); +// prop.putNum("ObjectList_" + c + "_objectMissCacheReadHit", mapy.get(Cache.StatKeys.objectMissCacheReadHit)); +// prop.putNum("ObjectList_" + c + "_objectMissCacheReadMiss", mapy.get(Cache.StatKeys.objectMissCacheReadMiss)); +// prop.putNum("ObjectList_" + c + "_objectMissCacheWriteUnique", mapy.get(Cache.StatKeys.objectMissCacheWriteUnique)); +// prop.putNum("ObjectList_" + c + "_objectMissCacheWriteDouble", mapy.get(Cache.StatKeys.objectMissCacheWriteDouble)); +// prop.putNum("ObjectList_" + c + "_objectMissCacheDeletes", mapy.get(Cache.StatKeys.objectMissCacheDeletes)); +// //prop.put("ObjectList_" + c + "_objectMissCacheFlushes", mapy.get(Cache.StatKeys.objectMissCacheFlushes)); +// +// c++; +// } +// prop.put("ObjectList", c); +// prop.putNum("objectCacheStopGrow", Cache.getMemStopGrow() / (1024d * 1024d)); +// prop.putNum("objectCacheStartShrink", Cache.getMemStartShrink() / (1024d * 1024d)); +// prop.putNum("objectHitCacheTotalMem", totalhitmem / (1024d * 1024d)); +// prop.putNum("objectMissCacheTotalMem", totalmissmem / (1024d * 1024d)); prop.putNum("namecacheHit.size", Domains.nameCacheHitSize()); prop.putNum("namecacheHit.Hit", Domains.cacheHit_Hit); diff --git a/source/net/yacy/cora/federate/solr/connector/CachedSolrConnector.java b/source/net/yacy/cora/federate/solr/connector/CachedSolrConnector.java deleted file mode 100644 index 4036876d2..000000000 --- a/source/net/yacy/cora/federate/solr/connector/CachedSolrConnector.java +++ /dev/null @@ -1,313 +0,0 @@ -/** - * CachedSolrConnector - * Copyright 2013 by Michael Peter Christen - * First released 18.02.2013 at http://yacy.net - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program in the file lgpl21.txt - * If not, see . - */ - -package net.yacy.cora.federate.solr.connector; - -import java.io.IOException; -import java.util.Collection; -import java.util.LinkedHashMap; - -import net.yacy.cora.sorting.ReversibleScoreMap; -import net.yacy.cora.storage.ARC; -import net.yacy.cora.storage.ConcurrentARC; -import net.yacy.kelondro.data.word.Word; -import net.yacy.kelondro.util.MemoryControl; -import net.yacy.search.schema.CollectionSchema; - -import org.apache.solr.client.solrj.response.QueryResponse; -import org.apache.solr.client.solrj.util.ClientUtils; -import org.apache.solr.common.SolrDocument; -import org.apache.solr.common.SolrDocumentList; -import org.apache.solr.common.SolrException; -import org.apache.solr.common.SolrInputDocument; -import org.apache.solr.common.params.ModifiableSolrParams; - -public class CachedSolrConnector extends AbstractSolrConnector implements SolrConnector { - - private final static Object EXIST = new Object(); - - private SolrConnector solr; - private final ARC documentCache; - public final ARC hitCache, missCache; - public long documentCache_Hit = 0, documentCache_Miss = 0, documentCache_Insert = 0; // for statistics only; do not write - public long hitCache_Hit = 0, hitCache_Miss = 0, hitCache_Insert = 0; // for statistics only; do not write - public long missCache_Hit = 0, missCache_Miss = 0, missCache_Insert = 0; // for statistics only; do not write - - private static final String idQuery(String id) { - return CollectionSchema.id.getSolrFieldName() + ":\"" + id + "\""; - } - - public CachedSolrConnector(SolrConnector c, int hitCacheMax, int missCacheMax, int docCacheMax) { - this.solr = c; - int partitions = Runtime.getRuntime().availableProcessors() * 2; - this.documentCache = new ConcurrentARC(docCacheMax, partitions); - this.hitCache = new ConcurrentARC(hitCacheMax, partitions); - this.missCache = new ConcurrentARC(missCacheMax, partitions); - } - - @Override - public int bufferSize() { - return solr.bufferSize(); - } - - @Override - public void clearCaches() { - this.hitCache.clear(); - this.missCache.clear(); - this.documentCache.clear(); - if (this.solr != null) this.solr.commit(true); - } - - @Override - public boolean isClosed() { - return this.solr == null || this.solr.isClosed(); - } - - @Override - protected void finalize() throws Throwable { - this.close(); - } - - @Override - public synchronized void close() { - this.clearCaches(); - if (this.solr != null) this.solr.close(); - this.solr = null; - } - - /** - * delete everything in the solr index - * @throws IOException - */ - @Override - public void clear() throws IOException { - this.clearCaches(); - if (this.solr != null) this.solr.clear(); - } - - /** - * delete an entry from solr - * @param id the url hash of the entry - * @throws IOException - */ - @Override - public void deleteById(final String id) throws IOException { - String q = idQuery(id); - this.documentCache.remove(q); - this.hitCache.remove(q); - this.missCache.put(q, EXIST); - this.missCache_Insert++; - if (this.solr != null) this.solr.deleteByQuery(q); - } - - /** - * delete a set of entries from solr; entries are identified by their url hash - * @param ids a list of url hashes - * @throws IOException - */ - @Override - public void deleteByIds(final Collection ids) throws IOException { - for (String id: ids) { - String q = idQuery(id); - this.documentCache.remove(q); - this.hitCache.remove(q); - this.missCache.put(q, EXIST); - this.missCache_Insert++; - } - if (this.solr != null) this.solr.deleteByIds(ids); - } - - @Override - public void deleteByQuery(final String querystring) throws IOException { - this.clearCaches(); - this.solr.deleteByQuery(querystring); - } - - @Override - public SolrDocument getDocumentById(final String id, final String ... fields) throws IOException { - assert id.length() == Word.commonHashLength : "wrong id: " + id; - String q = idQuery(id); - SolrDocument doc = fields.length == 0 ? this.documentCache.get(q) : null; - if (doc != null) { - this.documentCache_Hit++; - return doc; - } - documentCache_Miss++; - if (this.missCache.containsKey(q)) { - this.missCache_Hit++; - return null; - } - this.missCache_Miss++; - if (solr != null && ((doc = solr.getDocumentById(id, fields)) != null)) { - addToCache(doc, fields.length == 0); - return doc; - } - // check if there is a autocommit problem - if (this.hitCache.containsKey(q)) { - // the document should be there, therefore make a commit and check again - if (solr != null && ((doc = solr.getDocumentById(id, fields)) != null)) { - addToCache(doc, fields.length == 0); - } - } - this.missCache.put(q, EXIST); - this.missCache_Insert++; - return null; - } - - /** - * add a Solr document - * @param solrdoc - * @throws IOException - */ - @Override - public void add(final SolrInputDocument solrdoc) throws IOException { - String id = (String) solrdoc.getFieldValue(CollectionSchema.id.getSolrFieldName()); - assert id != null; - if (id == null) return; - String q = idQuery(id); - SolrDocument doc = ClientUtils.toSolrDocument(solrdoc); - addToCache(doc, true); - this.documentCache.put(q, doc); - this.documentCache_Insert++; - if (this.solr != null) this.solr.add(solrdoc); - } - - @Override - public void add(final Collection solrdocs) throws IOException, SolrException { - for (SolrInputDocument solrdoc: solrdocs) { - String id = (String) solrdoc.getFieldValue(CollectionSchema.id.getSolrFieldName()); - assert id != null; - if (id == null) continue; - String q = idQuery(id); - SolrDocument doc = ClientUtils.toSolrDocument(solrdoc); - addToCache(doc, true); - this.documentCache.put(q, doc); - this.documentCache_Insert++; - } - if (this.solr != null) this.solr.add(solrdocs); - } - - /** - * get a query result from solr - * to get all results set the query String to "*:*" - * @param querystring - * @throws IOException - */ - @Override - public SolrDocumentList getDocumentListByQuery(final String querystring, final String sort, final int offset, final int count, final String ... fields) throws IOException { - if (offset == 0 && count == 1 && querystring.startsWith("id:") && - ((querystring.length() == 17 && querystring.charAt(3) == '"' && querystring.charAt(16) == '"') || - querystring.length() == 15)) { - final SolrDocumentList list = new SolrDocumentList(); - SolrDocument doc = getDocumentById(querystring.charAt(3) == '"' ? querystring.substring(4, querystring.length() - 1) : querystring.substring(3), fields); - list.add(doc); - // no addToCache(list) here because that was already handlet in get(); - return list; - } - if (this.solr != null) { - SolrDocumentList list = this.solr.getDocumentListByQuery(querystring, sort, offset, count, fields); - addToCache(list, fields.length == 0); - return list; - } - - // combine both lists - SolrDocumentList list; - list = this.solr.getDocumentListByQuery(querystring, sort, offset, count, fields); - - // add caching - addToCache(list, fields.length == 0); - return list; - } - - @Override - public QueryResponse getResponseByParams(ModifiableSolrParams query) throws IOException, SolrException { - QueryResponse list = this.solr.getResponseByParams(query); - return list; - } - - @Override - public SolrDocumentList getDocumentListByParams(ModifiableSolrParams params) throws IOException, SolrException { - SolrDocumentList sdl = this.solr.getDocumentListByParams(params); - return sdl; - } - - @Override - public long getCountByQuery(final String querystring) throws IOException { - return this.solr.getCountByQuery(querystring); - } - - @Override - public LinkedHashMap> getFacets(final String query, final int maxresults, final String ... fields) throws IOException { - return this.solr.getFacets(query, maxresults, fields); - } - - private void addToCache(SolrDocumentList list, boolean doccache) { - if (MemoryControl.shortStatus()) clearCaches(); - for (final SolrDocument solrdoc: list) { - addToCache(solrdoc, doccache); - } - } - - private void addToCache(SolrDocument doc, boolean doccach) { - String id = (String) doc.getFieldValue(CollectionSchema.id.getSolrFieldName()); - String q = idQuery(id); - this.missCache.remove(q); - this.hitCache.put(q, EXIST); - this.hitCache_Insert++; - if (doccach) { - this.documentCache.put(q, doc); - this.documentCache_Insert++; - } - } - - @Override - public long getSize() { - long s = this.solr.getSize(); - return Math.max(this.documentCache.size(), Math.max(this.hitCache.size(), s)); // this might be incorrect if there are other requests than "id:.." in the cache - } - - public int nameCacheHitSize() { - return this.hitCache.size(); - } - - public int nameCacheMissSize() { - return this.missCache.size(); - } - - public int nameCacheDocumentSize() { - return this.documentCache.size(); - } - - @Override - public void commit(boolean softCommit) { - this.solr.commit(softCommit); - } - - @Override - public void optimize(int maxSegments) { - this.solr.optimize(maxSegments); - } - - @Override - public int getSegmentCount() { - return this.solr.getSegmentCount(); - } - -} \ No newline at end of file