You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by mr...@apache.org on 2009/11/02 12:14:26 UTC
svn commit: r831865 - in
/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene:
IOCounters.java QueryResultImpl.java directory/FSDirectoryManager.java
Author: mreutegg
Date: Mon Nov 2 11:14:25 2009
New Revision: 831865
URL: http://svn.apache.org/viewvc?rev=831865&view=rev
Log:
JCR-2376: Add basic I/O counters to query handler
Added:
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IOCounters.java (with props)
Modified:
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/QueryResultImpl.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/directory/FSDirectoryManager.java
Added: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IOCounters.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IOCounters.java?rev=831865&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IOCounters.java (added)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IOCounters.java Mon Nov 2 11:14:25 2009
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.core.query.lucene;
+
+/**
+ * <code>IOCounters</code> provides a basic mechanism to track I/O during query
+ * execution.
+ */
+public class IOCounters {
+
+ /**
+ * The key in the per-query-cache that identifies the read count.
+ */
+ private static final Object READ_COUNT = new Object();
+
+ /**
+ * @return the current read count for caused by the current thread.
+ */
+ public static long getReads() {
+ Long value = (Long) PerQueryCache.getInstance().get(IOCounters.class, READ_COUNT);
+ if (value == null) {
+ value = 0L;
+ }
+ return value;
+ }
+
+ /**
+ * Increments the read count caused by the current thread.
+ */
+ public static void incrRead() {
+ PerQueryCache cache = PerQueryCache.getInstance();
+ Long value = (Long) cache.get(IOCounters.class, READ_COUNT);
+ if (value == null) {
+ value = 0L;
+ }
+ cache.put(IOCounters.class, READ_COUNT, value + 1);
+ }
+}
Propchange: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IOCounters.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/QueryResultImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/QueryResultImpl.java?rev=831865&r1=831864&r2=831865&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/QueryResultImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/QueryResultImpl.java Mon Nov 2 11:14:25 2009
@@ -290,9 +290,11 @@
MultiColumnQueryHits result = null;
try {
long time = System.currentTimeMillis();
+ long r1 = IOCounters.getReads();
result = executeQuery(maxResultSize);
- log.debug("query executed in {} ms",
- System.currentTimeMillis() - time);
+ long r2 = IOCounters.getReads();
+ log.debug("query executed in {} ms ({})",
+ System.currentTimeMillis() - time, r2 - r1);
// set selector names
selectorNames = result.getSelectorNames();
@@ -306,8 +308,9 @@
time = System.currentTimeMillis();
collectScoreNodes(result, resultNodes, maxResultSize);
- log.debug("retrieved ScoreNodes in {} ms",
- System.currentTimeMillis() - time);
+ long r3 = IOCounters.getReads();
+ log.debug("retrieved ScoreNodes in {} ms ({})",
+ System.currentTimeMillis() - time, r3 - r2);
// update numResults
numResults = result.getSize();
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/directory/FSDirectoryManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/directory/FSDirectoryManager.java?rev=831865&r1=831864&r2=831865&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/directory/FSDirectoryManager.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/directory/FSDirectoryManager.java Mon Nov 2 11:14:25 2009
@@ -16,18 +16,19 @@
*/
package org.apache.jackrabbit.core.query.lucene.directory;
+import java.io.File;
+import java.io.FileFilter;
+import java.io.IOException;
+
+import org.apache.jackrabbit.core.query.lucene.IOCounters;
+import org.apache.jackrabbit.core.query.lucene.SearchIndex;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
-import org.apache.lucene.store.NativeFSLockFactory;
-import org.apache.lucene.store.IndexOutput;
import org.apache.lucene.store.IndexInput;
+import org.apache.lucene.store.IndexOutput;
import org.apache.lucene.store.Lock;
import org.apache.lucene.store.LockFactory;
-import org.apache.jackrabbit.core.query.lucene.SearchIndex;
-
-import java.io.IOException;
-import java.io.File;
-import java.io.FileFilter;
+import org.apache.lucene.store.NativeFSLockFactory;
/**
* <code>FSDirectoryManager</code> implements a directory manager for
@@ -185,7 +186,8 @@
}
public IndexInput openInput(String name) throws IOException {
- return directory.openInput(name);
+ IndexInput in = directory.openInput(name);
+ return new IndexInputLogWrapper(in);
}
public void close() throws IOException {
@@ -194,7 +196,8 @@
public IndexInput openInput(String name, int bufferSize)
throws IOException {
- return directory.openInput(name, bufferSize);
+ IndexInput in = directory.openInput(name, bufferSize);
+ return new IndexInputLogWrapper(in);
}
public Lock makeLock(String name) {
@@ -221,4 +224,49 @@
return this.getClass().getName() + "@" + directory;
}
}
+
+ /**
+ * Implements an index input wrapper that logs the number of time bytes
+ * are read from storage.
+ */
+ private static final class IndexInputLogWrapper extends IndexInput {
+
+ private IndexInput in;
+
+ IndexInputLogWrapper(IndexInput in) {
+ this.in = in;
+ }
+
+ public byte readByte() throws IOException {
+ return in.readByte();
+ }
+
+ public void readBytes(byte[] b, int offset, int len) throws IOException {
+ IOCounters.incrRead();
+ in.readBytes(b, offset, len);
+ }
+
+ public void close() throws IOException {
+ in.close();
+ }
+
+ public long getFilePointer() {
+ return in.getFilePointer();
+ }
+
+ public void seek(long pos) throws IOException {
+ in.seek(pos);
+ }
+
+ public long length() {
+ return in.length();
+ }
+
+ @Override
+ public Object clone() {
+ IndexInputLogWrapper clone = (IndexInputLogWrapper) super.clone();
+ clone.in = (IndexInput) in.clone();
+ return clone;
+ }
+ }
}