You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@lucene.apache.org by ot...@apache.org on 2007/04/03 01:37:17 UTC
svn commit: r524969 [4/5] - in
/lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark:
./ byTask/ byTask/feeds/ byTask/programmatic/ byTask/stats/ byTask/tasks/
byTask/utils/ standard/ stats/ utils/
Modified: lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/SearchTravRetTask.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/SearchTravRetTask.java?view=diff&rev=524969&r1=524968&r2=524969
==============================================================================
--- lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/SearchTravRetTask.java (original)
+++ lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/SearchTravRetTask.java Mon Apr 2 16:37:14 2007
@@ -1,44 +1,44 @@
-package org.apache.lucene.benchmark.byTask.tasks;
-
-/**
- * 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.
- */
-
-import org.apache.lucene.benchmark.byTask.PerfRunData;
-
-/**
- * Search and Traverse and Retrieve docs task.
- *
- * <p>Note: This task reuses the reader if it is already open.
- * Otherwise a reader is opened at start and closed at the end.
- * </p>
+package org.apache.lucene.benchmark.byTask.tasks;
+
+/**
+ * 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.
+ */
+
+import org.apache.lucene.benchmark.byTask.PerfRunData;
+
+/**
+ * Search and Traverse and Retrieve docs task.
*
- * <p>Takes optional param: traversal size (otherwise all results are traversed).</p>
+ * <p>Note: This task reuses the reader if it is already open.
+ * Otherwise a reader is opened at start and closed at the end.
+ * </p>
*
- * <p>Other side effects: counts additional 1 (record) for each traversed hit,
- * and 1 more for each retrieved (non null) document.</p>
- */
+ * <p>Takes optional param: traversal size (otherwise all results are traversed).</p>
+ *
+ * <p>Other side effects: counts additional 1 (record) for each traversed hit,
+ * and 1 more for each retrieved (non null) document.</p>
+ */
public class SearchTravRetTask extends SearchTravTask {
-
- public SearchTravRetTask(PerfRunData runData) {
- super(runData);
- }
-
- public boolean withRetrieve() {
- return true;
- }
-
-}
+
+ public SearchTravRetTask(PerfRunData runData) {
+ super(runData);
+ }
+
+ public boolean withRetrieve() {
+ return true;
+ }
+
+}
Propchange: lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/SearchTravRetTask.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/SearchTravTask.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/SearchTravTask.java?view=diff&rev=524969&r1=524968&r2=524969
==============================================================================
--- lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/SearchTravTask.java (original)
+++ lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/SearchTravTask.java Mon Apr 2 16:37:14 2007
@@ -1,65 +1,65 @@
-package org.apache.lucene.benchmark.byTask.tasks;
-
-/**
- * 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.
- */
-
-import org.apache.lucene.benchmark.byTask.PerfRunData;
-import org.apache.lucene.benchmark.byTask.feeds.QueryMaker;
-
-/**
- * Search and Traverse task.
- *
- * <p>Note: This task reuses the reader if it is already open.
- * Otherwise a reader is opened at start and closed at the end.
+package org.apache.lucene.benchmark.byTask.tasks;
+
+/**
+ * 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.
+ */
+
+import org.apache.lucene.benchmark.byTask.PerfRunData;
+import org.apache.lucene.benchmark.byTask.feeds.QueryMaker;
+
+/**
+ * Search and Traverse task.
+ *
+ * <p>Note: This task reuses the reader if it is already open.
+ * Otherwise a reader is opened at start and closed at the end.
* <p/>
*
- * <p>Takes optional param: traversal size (otherwise all results are traversed).</p>
- *
- * <p>Other side effects: counts additional 1 (record) for each traversed hit.</p>
- */
-public class SearchTravTask extends ReadTask {
+ * <p>Takes optional param: traversal size (otherwise all results are traversed).</p>
+ *
+ * <p>Other side effects: counts additional 1 (record) for each traversed hit.</p>
+ */
+public class SearchTravTask extends ReadTask {
protected int traversalSize = Integer.MAX_VALUE;
-
- public SearchTravTask(PerfRunData runData) {
- super(runData);
- }
-
- public boolean withRetrieve() {
- return false;
- }
-
- public boolean withSearch() {
- return true;
- }
-
- public boolean withTraverse() {
- return true;
- }
-
- public boolean withWarm() {
- return false;
- }
-
+
+ public SearchTravTask(PerfRunData runData) {
+ super(runData);
+ }
+
+ public boolean withRetrieve() {
+ return false;
+ }
+
+ public boolean withSearch() {
+ return true;
+ }
+
+ public boolean withTraverse() {
+ return true;
+ }
+
+ public boolean withWarm() {
+ return false;
+ }
+
- public QueryMaker getQueryMaker() {
+ public QueryMaker getQueryMaker() {
return getRunData().getQueryMaker(this);
- }
-
+ }
+
public int traversalSize() {
return traversalSize;
}
@@ -75,4 +75,4 @@
public boolean supportsParams() {
return true;
}
-}
+}
Propchange: lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/SearchTravTask.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/SetPropTask.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/SetPropTask.java?view=diff&rev=524969&r1=524968&r2=524969
==============================================================================
--- lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/SetPropTask.java (original)
+++ lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/SetPropTask.java Mon Apr 2 16:37:14 2007
@@ -1,61 +1,61 @@
-package org.apache.lucene.benchmark.byTask.tasks;
-
-import org.apache.lucene.benchmark.byTask.PerfRunData;
-
-/**
- * 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.
- */
-
-/**
- * Set a performance test configuration property.
- * A property may have a single value, or a sequence of values, seprated by ":".
- * If a sequence of values is specified, each time a new round starts,
- * the next (cyclic) value is taken.
+package org.apache.lucene.benchmark.byTask.tasks;
+
+import org.apache.lucene.benchmark.byTask.PerfRunData;
+
+/**
+ * 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.
+ */
+
+/**
+ * Set a performance test configuration property.
+ * A property may have a single value, or a sequence of values, seprated by ":".
+ * If a sequence of values is specified, each time a new round starts,
+ * the next (cyclic) value is taken.
* <br>Other side effects: none.
* <br>Takes mandatory param: "name,value" pair.
- * @see org.apache.lucene.benchmark.byTask.tasks.NewRoundTask
- */
-public class SetPropTask extends PerfTask {
-
- public SetPropTask(PerfRunData runData) {
- super(runData);
- }
-
- private String name;
- private String value;
-
- public int doLogic() throws Exception {
- if (name==null || value==null) {
- throw new Exception(getName()+" - undefined name or value: name="+name+" value="+value);
- }
- getRunData().getConfig().set(name,value);
- return 0;
- }
-
- /**
- * Set the params (property name and value).
- * @param params property name and value separated by ','.
- */
- public void setParams(String params) {
- super.setParams(params);
- int k = params.indexOf(",");
- name = params.substring(0,k).trim();
- value = params.substring(k+1).trim();
- }
-
+ * @see org.apache.lucene.benchmark.byTask.tasks.NewRoundTask
+ */
+public class SetPropTask extends PerfTask {
+
+ public SetPropTask(PerfRunData runData) {
+ super(runData);
+ }
+
+ private String name;
+ private String value;
+
+ public int doLogic() throws Exception {
+ if (name==null || value==null) {
+ throw new Exception(getName()+" - undefined name or value: name="+name+" value="+value);
+ }
+ getRunData().getConfig().set(name,value);
+ return 0;
+ }
+
+ /**
+ * Set the params (property name and value).
+ * @param params property name and value separated by ','.
+ */
+ public void setParams(String params) {
+ super.setParams(params);
+ int k = params.indexOf(",");
+ name = params.substring(0,k).trim();
+ value = params.substring(k+1).trim();
+ }
+
/* (non-Javadoc)
* @see org.apache.lucene.benchmark.byTask.tasks.PerfTask#supportsParams()
*/
@@ -63,4 +63,4 @@
return true;
}
-}
+}
Propchange: lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/SetPropTask.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/TaskSequence.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/TaskSequence.java?view=diff&rev=524969&r1=524968&r2=524969
==============================================================================
--- lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/TaskSequence.java (original)
+++ lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/TaskSequence.java Mon Apr 2 16:37:14 2007
@@ -1,295 +1,295 @@
-package org.apache.lucene.benchmark.byTask.tasks;
-
-/**
- * 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.
- */
-
-import java.util.ArrayList;
-import java.util.Iterator;
-
-import org.apache.lucene.benchmark.byTask.PerfRunData;
-import org.apache.lucene.benchmark.byTask.feeds.NoMoreDataException;
-
-/**
- * Sequence of parallel or sequential tasks.
- */
-public class TaskSequence extends PerfTask {
- public static int REPEAT_EXHAUST = -2;
- private ArrayList tasks;
- private int repetitions = 1;
- private boolean parallel;
- private TaskSequence parent;
- private boolean letChildReport = true;
- private int rate = 0;
- private boolean perMin = false; // rate, if set, is, by default, be sec.
- private String seqName;
-
- public TaskSequence (PerfRunData runData, String name, TaskSequence parent, boolean parallel) {
- super(runData);
- name = (name!=null ? name : (parallel ? "Par" : "Seq"));
- setName(name);
- setSequenceName();
- this.parent = parent;
- this.parallel = parallel;
- tasks = new ArrayList();
- }
-
- /**
- * @return Returns the parallel.
- */
- public boolean isParallel() {
- return parallel;
- }
-
- /**
- * @return Returns the repetitions.
- */
- public int getRepetitions() {
- return repetitions;
- }
-
- /**
- * @param repetitions The repetitions to set.
- * @throws Exception
- */
- public void setRepetitions(int repetitions) throws Exception {
- this.repetitions = repetitions;
- if (repetitions==REPEAT_EXHAUST && isParallel()) {
- throw new Exception("REPEAT_EXHAUST is not allowed for parallel tasks");
- }
- setSequenceName();
- }
-
- /**
- * @return Returns the parent.
- */
- public TaskSequence getParent() {
- return parent;
- }
-
- /*
- * (non-Javadoc)
- * @see org.apache.lucene.benchmark.byTask.tasks.PerfTask#doLogic()
- */
- public int doLogic() throws Exception {
- return ( parallel ? doParallelTasks() : doSerialTasks());
- }
-
- private int doSerialTasks() throws Exception {
- if (rate > 0) {
- return doSerialTasksWithRate();
- }
-
- int count = 0;
- boolean exhausted = false;
- for (int k=0; (repetitions==REPEAT_EXHAUST && !exhausted) || k<repetitions; k++) {
- for (Iterator it = tasks.iterator(); it.hasNext();) {
- PerfTask task = (PerfTask) it.next();
- try {
- count += task.runAndMaybeStats(letChildReport);
- } catch (NoMoreDataException e) {
- exhausted = true;
- }
- }
- }
- return count;
- }
-
- private int doSerialTasksWithRate() throws Exception {
- long delayStep = (perMin ? 60000 : 1000) /rate;
- long nextStartTime = System.currentTimeMillis();
- int count = 0;
- boolean exhausted = false;
- for (int k=0; (repetitions==REPEAT_EXHAUST && !exhausted) || k<repetitions; k++) {
- for (Iterator it = tasks.iterator(); it.hasNext();) {
- PerfTask task = (PerfTask) it.next();
- long waitMore = nextStartTime - System.currentTimeMillis();
- if (waitMore > 0) {
- //System.out.println("wait: "+waitMore+" for rate: "+ratePerMin+" (delayStep="+delayStep+")");
- Thread.sleep(waitMore);
- }
- nextStartTime += delayStep; // this aims at avarage rate.
- try {
- count += task.runAndMaybeStats(letChildReport);
- } catch (NoMoreDataException e) {
- exhausted = true;
- }
- }
- }
- return count;
- }
-
- private int doParallelTasks() throws Exception {
- final int count [] = {0};
- Thread t[] = new Thread [repetitions * tasks.size()];
- // prepare threads
- int indx = 0;
- for (int k=0; k<repetitions; k++) {
- for (int i = 0; i < tasks.size(); i++) {
- final PerfTask task = (PerfTask) ((PerfTask) tasks.get(i)).clone();
- t[indx++] = new Thread() {
- public void run() {
- int n;
- try {
- n = task.runAndMaybeStats(letChildReport);
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- synchronized (count) {
- count[0] += n;
- }
- }
- };
- }
- }
- // run threads
- startThreads(t);
- // wait for all threads to complete
- for (int i = 0; i < t.length; i++) {
- t[i].join();
- }
- // return total count
- return count[0];
- }
-
- // run threads
- private void startThreads(Thread[] t) throws InterruptedException {
- if (rate > 0) {
- startlThreadsWithRate(t);
- return;
- }
- for (int i = 0; i < t.length; i++) {
- t[i].start();
- }
- }
-
- // run threadsm with rate
- private void startlThreadsWithRate(Thread[] t) throws InterruptedException {
- long delayStep = (perMin ? 60000 : 1000) /rate;
- long nextStartTime = System.currentTimeMillis();
- for (int i = 0; i < t.length; i++) {
- long waitMore = nextStartTime - System.currentTimeMillis();
- if (waitMore > 0) {
- //System.out.println("thread wait: "+waitMore+" for rate: "+ratePerMin+" (delayStep="+delayStep+")");
- Thread.sleep(waitMore);
- }
- nextStartTime += delayStep; // this aims at avarage rate of starting threads.
- t[i].start();
- }
- }
-
- public void addTask(PerfTask task) {
- tasks.add(task);
- task.setDepth(getDepth()+1);
- }
-
- /* (non-Javadoc)
- * @see java.lang.Object#toString()
- */
- public String toString() {
- String padd = getPadding();
- StringBuffer sb = new StringBuffer(super.toString());
- sb.append(parallel ? " [" : " {");
- sb.append(NEW_LINE);
- for (Iterator it = tasks.iterator(); it.hasNext();) {
- PerfTask task = (PerfTask) it.next();
- sb.append(task.toString());
- sb.append(NEW_LINE);
- }
- sb.append(padd);
- sb.append(!letChildReport ? ">" : (parallel ? "]" : "}"));
- if (repetitions>1) {
- sb.append(" * " + repetitions);
- }
- if (repetitions==REPEAT_EXHAUST) {
- sb.append(" * EXHAUST");
- }
- if (rate>0) {
- sb.append(", rate: " + rate+"/"+(perMin?"min":"sec"));
- }
- return sb.toString();
- }
-
- /**
- * Execute child tasks in a way that they do not report their time separately.
- */
- public void setNoChildReport() {
- letChildReport = false;
- for (Iterator it = tasks.iterator(); it.hasNext();) {
- PerfTask task = (PerfTask) it.next();
- if (task instanceof TaskSequence) {
- ((TaskSequence)task).setNoChildReport();
- }
- }
- }
-
- /**
- * Returns the rate per minute: how many operations should be performed in a minute.
- * If 0 this has no effect.
- * @return the rate per min: how many operations should be performed in a minute.
- */
- public int getRate() {
- return (perMin ? rate : 60*rate);
- }
-
- /**
- * @param rate The rate to set.
- */
- public void setRate(int rate, boolean perMin) {
- this.rate = rate;
- this.perMin = perMin;
- setSequenceName();
- }
-
- private void setSequenceName() {
- seqName = super.getName();
- if (repetitions==REPEAT_EXHAUST) {
- seqName += "_Exhaust";
- } else if (repetitions>1) {
- seqName += "_"+repetitions;
- }
- if (rate>0) {
- seqName += "_" + rate + (perMin?"/min":"/sec");
- }
- if (parallel && seqName.toLowerCase().indexOf("par")<0) {
- seqName += "_Par";
- }
- }
-
- public String getName() {
- return seqName; // overide to include more info
- }
-
- /**
- * @return Returns the tasks.
- */
- public ArrayList getTasks() {
- return tasks;
- }
-
- /* (non-Javadoc)
- * @see java.lang.Object#clone()
- */
- protected Object clone() throws CloneNotSupportedException {
- TaskSequence res = (TaskSequence) super.clone();
- res.tasks = new ArrayList();
- for (int i = 0; i < tasks.size(); i++) {
- res.tasks.add(((PerfTask)tasks.get(i)).clone());
- }
- return res;
- }
-
-}
+package org.apache.lucene.benchmark.byTask.tasks;
+
+/**
+ * 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.
+ */
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import org.apache.lucene.benchmark.byTask.PerfRunData;
+import org.apache.lucene.benchmark.byTask.feeds.NoMoreDataException;
+
+/**
+ * Sequence of parallel or sequential tasks.
+ */
+public class TaskSequence extends PerfTask {
+ public static int REPEAT_EXHAUST = -2;
+ private ArrayList tasks;
+ private int repetitions = 1;
+ private boolean parallel;
+ private TaskSequence parent;
+ private boolean letChildReport = true;
+ private int rate = 0;
+ private boolean perMin = false; // rate, if set, is, by default, be sec.
+ private String seqName;
+
+ public TaskSequence (PerfRunData runData, String name, TaskSequence parent, boolean parallel) {
+ super(runData);
+ name = (name!=null ? name : (parallel ? "Par" : "Seq"));
+ setName(name);
+ setSequenceName();
+ this.parent = parent;
+ this.parallel = parallel;
+ tasks = new ArrayList();
+ }
+
+ /**
+ * @return Returns the parallel.
+ */
+ public boolean isParallel() {
+ return parallel;
+ }
+
+ /**
+ * @return Returns the repetitions.
+ */
+ public int getRepetitions() {
+ return repetitions;
+ }
+
+ /**
+ * @param repetitions The repetitions to set.
+ * @throws Exception
+ */
+ public void setRepetitions(int repetitions) throws Exception {
+ this.repetitions = repetitions;
+ if (repetitions==REPEAT_EXHAUST && isParallel()) {
+ throw new Exception("REPEAT_EXHAUST is not allowed for parallel tasks");
+ }
+ setSequenceName();
+ }
+
+ /**
+ * @return Returns the parent.
+ */
+ public TaskSequence getParent() {
+ return parent;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.lucene.benchmark.byTask.tasks.PerfTask#doLogic()
+ */
+ public int doLogic() throws Exception {
+ return ( parallel ? doParallelTasks() : doSerialTasks());
+ }
+
+ private int doSerialTasks() throws Exception {
+ if (rate > 0) {
+ return doSerialTasksWithRate();
+ }
+
+ int count = 0;
+ boolean exhausted = false;
+ for (int k=0; (repetitions==REPEAT_EXHAUST && !exhausted) || k<repetitions; k++) {
+ for (Iterator it = tasks.iterator(); it.hasNext();) {
+ PerfTask task = (PerfTask) it.next();
+ try {
+ count += task.runAndMaybeStats(letChildReport);
+ } catch (NoMoreDataException e) {
+ exhausted = true;
+ }
+ }
+ }
+ return count;
+ }
+
+ private int doSerialTasksWithRate() throws Exception {
+ long delayStep = (perMin ? 60000 : 1000) /rate;
+ long nextStartTime = System.currentTimeMillis();
+ int count = 0;
+ boolean exhausted = false;
+ for (int k=0; (repetitions==REPEAT_EXHAUST && !exhausted) || k<repetitions; k++) {
+ for (Iterator it = tasks.iterator(); it.hasNext();) {
+ PerfTask task = (PerfTask) it.next();
+ long waitMore = nextStartTime - System.currentTimeMillis();
+ if (waitMore > 0) {
+ //System.out.println("wait: "+waitMore+" for rate: "+ratePerMin+" (delayStep="+delayStep+")");
+ Thread.sleep(waitMore);
+ }
+ nextStartTime += delayStep; // this aims at avarage rate.
+ try {
+ count += task.runAndMaybeStats(letChildReport);
+ } catch (NoMoreDataException e) {
+ exhausted = true;
+ }
+ }
+ }
+ return count;
+ }
+
+ private int doParallelTasks() throws Exception {
+ final int count [] = {0};
+ Thread t[] = new Thread [repetitions * tasks.size()];
+ // prepare threads
+ int indx = 0;
+ for (int k=0; k<repetitions; k++) {
+ for (int i = 0; i < tasks.size(); i++) {
+ final PerfTask task = (PerfTask) ((PerfTask) tasks.get(i)).clone();
+ t[indx++] = new Thread() {
+ public void run() {
+ int n;
+ try {
+ n = task.runAndMaybeStats(letChildReport);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ synchronized (count) {
+ count[0] += n;
+ }
+ }
+ };
+ }
+ }
+ // run threads
+ startThreads(t);
+ // wait for all threads to complete
+ for (int i = 0; i < t.length; i++) {
+ t[i].join();
+ }
+ // return total count
+ return count[0];
+ }
+
+ // run threads
+ private void startThreads(Thread[] t) throws InterruptedException {
+ if (rate > 0) {
+ startlThreadsWithRate(t);
+ return;
+ }
+ for (int i = 0; i < t.length; i++) {
+ t[i].start();
+ }
+ }
+
+ // run threadsm with rate
+ private void startlThreadsWithRate(Thread[] t) throws InterruptedException {
+ long delayStep = (perMin ? 60000 : 1000) /rate;
+ long nextStartTime = System.currentTimeMillis();
+ for (int i = 0; i < t.length; i++) {
+ long waitMore = nextStartTime - System.currentTimeMillis();
+ if (waitMore > 0) {
+ //System.out.println("thread wait: "+waitMore+" for rate: "+ratePerMin+" (delayStep="+delayStep+")");
+ Thread.sleep(waitMore);
+ }
+ nextStartTime += delayStep; // this aims at avarage rate of starting threads.
+ t[i].start();
+ }
+ }
+
+ public void addTask(PerfTask task) {
+ tasks.add(task);
+ task.setDepth(getDepth()+1);
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#toString()
+ */
+ public String toString() {
+ String padd = getPadding();
+ StringBuffer sb = new StringBuffer(super.toString());
+ sb.append(parallel ? " [" : " {");
+ sb.append(NEW_LINE);
+ for (Iterator it = tasks.iterator(); it.hasNext();) {
+ PerfTask task = (PerfTask) it.next();
+ sb.append(task.toString());
+ sb.append(NEW_LINE);
+ }
+ sb.append(padd);
+ sb.append(!letChildReport ? ">" : (parallel ? "]" : "}"));
+ if (repetitions>1) {
+ sb.append(" * " + repetitions);
+ }
+ if (repetitions==REPEAT_EXHAUST) {
+ sb.append(" * EXHAUST");
+ }
+ if (rate>0) {
+ sb.append(", rate: " + rate+"/"+(perMin?"min":"sec"));
+ }
+ return sb.toString();
+ }
+
+ /**
+ * Execute child tasks in a way that they do not report their time separately.
+ */
+ public void setNoChildReport() {
+ letChildReport = false;
+ for (Iterator it = tasks.iterator(); it.hasNext();) {
+ PerfTask task = (PerfTask) it.next();
+ if (task instanceof TaskSequence) {
+ ((TaskSequence)task).setNoChildReport();
+ }
+ }
+ }
+
+ /**
+ * Returns the rate per minute: how many operations should be performed in a minute.
+ * If 0 this has no effect.
+ * @return the rate per min: how many operations should be performed in a minute.
+ */
+ public int getRate() {
+ return (perMin ? rate : 60*rate);
+ }
+
+ /**
+ * @param rate The rate to set.
+ */
+ public void setRate(int rate, boolean perMin) {
+ this.rate = rate;
+ this.perMin = perMin;
+ setSequenceName();
+ }
+
+ private void setSequenceName() {
+ seqName = super.getName();
+ if (repetitions==REPEAT_EXHAUST) {
+ seqName += "_Exhaust";
+ } else if (repetitions>1) {
+ seqName += "_"+repetitions;
+ }
+ if (rate>0) {
+ seqName += "_" + rate + (perMin?"/min":"/sec");
+ }
+ if (parallel && seqName.toLowerCase().indexOf("par")<0) {
+ seqName += "_Par";
+ }
+ }
+
+ public String getName() {
+ return seqName; // overide to include more info
+ }
+
+ /**
+ * @return Returns the tasks.
+ */
+ public ArrayList getTasks() {
+ return tasks;
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#clone()
+ */
+ protected Object clone() throws CloneNotSupportedException {
+ TaskSequence res = (TaskSequence) super.clone();
+ res.tasks = new ArrayList();
+ for (int i = 0; i < tasks.size(); i++) {
+ res.tasks.add(((PerfTask)tasks.get(i)).clone());
+ }
+ return res;
+ }
+
+}
Propchange: lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/TaskSequence.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/WarmTask.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/WarmTask.java?view=diff&rev=524969&r1=524968&r2=524969
==============================================================================
--- lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/WarmTask.java (original)
+++ lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/WarmTask.java Mon Apr 2 16:37:14 2007
@@ -1,60 +1,60 @@
-package org.apache.lucene.benchmark.byTask.tasks;
-
-/**
- * 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.
- */
-
-import org.apache.lucene.benchmark.byTask.PerfRunData;
-import org.apache.lucene.benchmark.byTask.feeds.QueryMaker;
-
-/**
- * Warm reader task: retrieve all reader documents.
- *
- * <p>Note: This task reuses the reader if it is already open.
- * Otherwise a reader is opened at start and closed at the end.
- * </p>
- *
- * <p>Other side effects: counts additional 1 (record) for each
- * retrieved (non null) document.</p>
- */
-public class WarmTask extends ReadTask {
-
- public WarmTask(PerfRunData runData) {
- super(runData);
- }
-
- public boolean withRetrieve() {
- return false;
- }
-
- public boolean withSearch() {
- return false;
- }
-
- public boolean withTraverse() {
- return false;
- }
-
- public boolean withWarm() {
- return true;
- }
-
- public QueryMaker getQueryMaker() {
- return null; // not required for this task.
- }
-
-
-}
+package org.apache.lucene.benchmark.byTask.tasks;
+
+/**
+ * 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.
+ */
+
+import org.apache.lucene.benchmark.byTask.PerfRunData;
+import org.apache.lucene.benchmark.byTask.feeds.QueryMaker;
+
+/**
+ * Warm reader task: retrieve all reader documents.
+ *
+ * <p>Note: This task reuses the reader if it is already open.
+ * Otherwise a reader is opened at start and closed at the end.
+ * </p>
+ *
+ * <p>Other side effects: counts additional 1 (record) for each
+ * retrieved (non null) document.</p>
+ */
+public class WarmTask extends ReadTask {
+
+ public WarmTask(PerfRunData runData) {
+ super(runData);
+ }
+
+ public boolean withRetrieve() {
+ return false;
+ }
+
+ public boolean withSearch() {
+ return false;
+ }
+
+ public boolean withTraverse() {
+ return false;
+ }
+
+ public boolean withWarm() {
+ return true;
+ }
+
+ public QueryMaker getQueryMaker() {
+ return null; // not required for this task.
+ }
+
+
+}
Propchange: lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/WarmTask.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/utils/Algorithm.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/utils/Algorithm.java?view=diff&rev=524969&r1=524968&r2=524969
==============================================================================
--- lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/utils/Algorithm.java (original)
+++ lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/utils/Algorithm.java Mon Apr 2 16:37:14 2007
@@ -1,258 +1,258 @@
-package org.apache.lucene.benchmark.byTask.utils;
-
-/**
- * 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.
- */
-
-import java.io.StreamTokenizer;
-import java.io.StringReader;
-import java.lang.reflect.Constructor;
-import java.util.ArrayList;
-
-import org.apache.lucene.benchmark.byTask.PerfRunData;
-import org.apache.lucene.benchmark.byTask.tasks.PerfTask;
-import org.apache.lucene.benchmark.byTask.tasks.RepSumByPrefTask;
-import org.apache.lucene.benchmark.byTask.tasks.TaskSequence;
-
-/**
- * Test algorithm, as read from file
- */
-public class Algorithm {
-
- private TaskSequence sequence;
-
- /**
- * Read algorithm from file
- * @param runData perf-run-data used at running the tasks.
- * @throws Exception if errors while parsing the algorithm
- */
- public Algorithm (PerfRunData runData) throws Exception {
- String algTxt = runData.getConfig().getAlgorithmText();
- sequence = new TaskSequence(runData,null,null,false);
- TaskSequence currSequence = sequence;
- PerfTask prevTask = null;
- StreamTokenizer stok = new StreamTokenizer(new StringReader(algTxt));
- stok.commentChar('#');
- stok.eolIsSignificant(false);
- stok.ordinaryChar('"');
- stok.ordinaryChar('/');
- stok.ordinaryChar('(');
- stok.ordinaryChar(')');
- boolean colonOk = false;
- currSequence.setDepth(0);
- String taskPackage = PerfTask.class.getPackage().getName() + ".";
-
- Class paramClass[] = {PerfRunData.class};
- PerfRunData paramObj[] = {runData};
-
- while (stok.nextToken() != StreamTokenizer.TT_EOF) {
- switch(stok.ttype) {
-
- case StreamTokenizer.TT_WORD:
- String s = stok.sval;
- Constructor cnstr = Class.forName(taskPackage+s+"Task").getConstructor(paramClass);
- PerfTask task = (PerfTask) cnstr.newInstance(paramObj);
- currSequence.addTask(task);
- if (task instanceof RepSumByPrefTask) {
- stok.nextToken();
- String prefix = stok.sval;
- if (prefix==null || prefix.length()==0) {
- throw new Exception("named report prefix problem - "+stok.toString());
- }
- ((RepSumByPrefTask) task).setPrefix(prefix);
- }
- // check for task param: '(' someParam ')'
- stok.nextToken();
- if (stok.ttype!='(') {
- stok.pushBack();
- } else {
- // get params, for tasks that supports them, - anything until next ')'
- StringBuffer params = new StringBuffer();
- stok.nextToken();
- while (stok.ttype!=')') {
- switch (stok.ttype) {
- case StreamTokenizer.TT_NUMBER:
- params.append(stok.nval);
- break;
- case StreamTokenizer.TT_WORD:
- params.append(stok.sval);
- break;
- case StreamTokenizer.TT_EOF:
- throw new Exception("unexpexted EOF: - "+stok.toString());
- default:
- params.append((char)stok.ttype);
- }
- stok.nextToken();
- }
- String prm = params.toString().trim();
- if (prm.length()>0) {
- task.setParams(prm);
- }
- }
-
- // ---------------------------------------
- colonOk = false; prevTask = task;
- break;
-
- default:
- char c = (char)stok.ttype;
-
- switch(c) {
-
- case ':' :
- if (!colonOk) throw new Exception("colon unexpexted: - "+stok.toString());
- colonOk = false;
- // get repetitions number
- stok.nextToken();
- if ((char)stok.ttype == '*') {
- ((TaskSequence)prevTask).setRepetitions(TaskSequence.REPEAT_EXHAUST);
- } else {
- if (stok.ttype!=StreamTokenizer.TT_NUMBER) throw new Exception("expexted repetitions number: - "+stok.toString());
- ((TaskSequence)prevTask).setRepetitions((int)stok.nval);
- }
- // check for rate specification (ops/min)
- stok.nextToken();
- if (stok.ttype!=':') {
- stok.pushBack();
- } else {
- // get rate number
- stok.nextToken();
- if (stok.ttype!=StreamTokenizer.TT_NUMBER) throw new Exception("expexted rate number: - "+stok.toString());
- // check for unit - min or sec, sec is default
- stok.nextToken();
- if (stok.ttype!='/') {
- stok.pushBack();
- ((TaskSequence)prevTask).setRate((int)stok.nval,false); // set rate per sec
- } else {
- stok.nextToken();
- if (stok.ttype!=StreamTokenizer.TT_WORD) throw new Exception("expexted rate unit: 'min' or 'sec' - "+stok.toString());
- String unit = stok.sval.toLowerCase();
- if ("min".equals(unit)) {
- ((TaskSequence)prevTask).setRate((int)stok.nval,true); // set rate per min
- } else if ("sec".equals(unit)) {
- ((TaskSequence)prevTask).setRate((int)stok.nval,false); // set rate per sec
- } else {
- throw new Exception("expexted rate unit: 'min' or 'sec' - "+stok.toString());
- }
- }
- }
- colonOk = false;
- break;
-
- case '{' :
- case '[' :
- // a sequence
- // check for sequence name
- String name = null;
- stok.nextToken();
- if (stok.ttype!='"') {
- stok.pushBack();
- } else {
- stok.nextToken();
- name = stok.sval;
- stok.nextToken();
- if (stok.ttype!='"' || name==null || name.length()==0) {
- throw new Exception("sequence name problem - "+stok.toString());
- }
- }
- // start the sequence
- TaskSequence seq2 = new TaskSequence(runData, name, currSequence, c=='[');
- currSequence.addTask(seq2);
- currSequence = seq2;
- colonOk = false;
- break;
-
- case '>' :
- currSequence.setNoChildReport();
- case '}' :
- case ']' :
- // end sequence
- colonOk = true; prevTask = currSequence;
- currSequence = currSequence.getParent();
- break;
-
- } //switch(c)
- break;
-
- } //switch(stok.ttype)
-
- }
-
- if (sequence != currSequence) {
- throw new Exception("Unmatched sequences");
- }
-
- // remove redundant top level enclosing sequences
- while (sequence.getRepetitions()==1 && sequence.getRate()==0) {
- ArrayList t = sequence.getTasks();
- if (t!=null && t.size()==1) {
- PerfTask p = (PerfTask) t.get(0);
- if (p instanceof TaskSequence) {
- sequence = (TaskSequence) p;
- continue;
- }
- }
- break;
- }
- }
-
- /* (non-Javadoc)
- * @see java.lang.Object#toString()
- */
- public String toString() {
- String newline = System.getProperty("line.separator");
- StringBuffer sb = new StringBuffer();
- sb.append(sequence.toString());
- sb.append(newline);
- return sb.toString();
- }
-
- /**
- * Execute this algorithm
- * @throws Exception
- */
- public void execute() throws Exception {
- sequence.doLogic();
- }
-
- /**
- * Expert: for test purposes, return all tasks participating in this algorithm.
- * @return all tasks participating in this algorithm.
- */
- public ArrayList extractTasks() {
- ArrayList res = new ArrayList();
- extractTasks(res, sequence);
- return res;
- }
- private void extractTasks (ArrayList extrct, TaskSequence seq) {
- if (seq==null)
- return;
- extrct.add(seq);
- ArrayList t = sequence.getTasks();
- if (t==null)
- return;
- for (int i = 0; i < t.size(); i++) {
- PerfTask p = (PerfTask) t.get(0);
- if (p instanceof TaskSequence) {
- extractTasks(extrct, (TaskSequence)p);
- } else {
- extrct.add(p);
- }
- }
- }
-
-}
-
+package org.apache.lucene.benchmark.byTask.utils;
+
+/**
+ * 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.
+ */
+
+import java.io.StreamTokenizer;
+import java.io.StringReader;
+import java.lang.reflect.Constructor;
+import java.util.ArrayList;
+
+import org.apache.lucene.benchmark.byTask.PerfRunData;
+import org.apache.lucene.benchmark.byTask.tasks.PerfTask;
+import org.apache.lucene.benchmark.byTask.tasks.RepSumByPrefTask;
+import org.apache.lucene.benchmark.byTask.tasks.TaskSequence;
+
+/**
+ * Test algorithm, as read from file
+ */
+public class Algorithm {
+
+ private TaskSequence sequence;
+
+ /**
+ * Read algorithm from file
+ * @param runData perf-run-data used at running the tasks.
+ * @throws Exception if errors while parsing the algorithm
+ */
+ public Algorithm (PerfRunData runData) throws Exception {
+ String algTxt = runData.getConfig().getAlgorithmText();
+ sequence = new TaskSequence(runData,null,null,false);
+ TaskSequence currSequence = sequence;
+ PerfTask prevTask = null;
+ StreamTokenizer stok = new StreamTokenizer(new StringReader(algTxt));
+ stok.commentChar('#');
+ stok.eolIsSignificant(false);
+ stok.ordinaryChar('"');
+ stok.ordinaryChar('/');
+ stok.ordinaryChar('(');
+ stok.ordinaryChar(')');
+ boolean colonOk = false;
+ currSequence.setDepth(0);
+ String taskPackage = PerfTask.class.getPackage().getName() + ".";
+
+ Class paramClass[] = {PerfRunData.class};
+ PerfRunData paramObj[] = {runData};
+
+ while (stok.nextToken() != StreamTokenizer.TT_EOF) {
+ switch(stok.ttype) {
+
+ case StreamTokenizer.TT_WORD:
+ String s = stok.sval;
+ Constructor cnstr = Class.forName(taskPackage+s+"Task").getConstructor(paramClass);
+ PerfTask task = (PerfTask) cnstr.newInstance(paramObj);
+ currSequence.addTask(task);
+ if (task instanceof RepSumByPrefTask) {
+ stok.nextToken();
+ String prefix = stok.sval;
+ if (prefix==null || prefix.length()==0) {
+ throw new Exception("named report prefix problem - "+stok.toString());
+ }
+ ((RepSumByPrefTask) task).setPrefix(prefix);
+ }
+ // check for task param: '(' someParam ')'
+ stok.nextToken();
+ if (stok.ttype!='(') {
+ stok.pushBack();
+ } else {
+ // get params, for tasks that supports them, - anything until next ')'
+ StringBuffer params = new StringBuffer();
+ stok.nextToken();
+ while (stok.ttype!=')') {
+ switch (stok.ttype) {
+ case StreamTokenizer.TT_NUMBER:
+ params.append(stok.nval);
+ break;
+ case StreamTokenizer.TT_WORD:
+ params.append(stok.sval);
+ break;
+ case StreamTokenizer.TT_EOF:
+ throw new Exception("unexpexted EOF: - "+stok.toString());
+ default:
+ params.append((char)stok.ttype);
+ }
+ stok.nextToken();
+ }
+ String prm = params.toString().trim();
+ if (prm.length()>0) {
+ task.setParams(prm);
+ }
+ }
+
+ // ---------------------------------------
+ colonOk = false; prevTask = task;
+ break;
+
+ default:
+ char c = (char)stok.ttype;
+
+ switch(c) {
+
+ case ':' :
+ if (!colonOk) throw new Exception("colon unexpexted: - "+stok.toString());
+ colonOk = false;
+ // get repetitions number
+ stok.nextToken();
+ if ((char)stok.ttype == '*') {
+ ((TaskSequence)prevTask).setRepetitions(TaskSequence.REPEAT_EXHAUST);
+ } else {
+ if (stok.ttype!=StreamTokenizer.TT_NUMBER) throw new Exception("expexted repetitions number: - "+stok.toString());
+ ((TaskSequence)prevTask).setRepetitions((int)stok.nval);
+ }
+ // check for rate specification (ops/min)
+ stok.nextToken();
+ if (stok.ttype!=':') {
+ stok.pushBack();
+ } else {
+ // get rate number
+ stok.nextToken();
+ if (stok.ttype!=StreamTokenizer.TT_NUMBER) throw new Exception("expexted rate number: - "+stok.toString());
+ // check for unit - min or sec, sec is default
+ stok.nextToken();
+ if (stok.ttype!='/') {
+ stok.pushBack();
+ ((TaskSequence)prevTask).setRate((int)stok.nval,false); // set rate per sec
+ } else {
+ stok.nextToken();
+ if (stok.ttype!=StreamTokenizer.TT_WORD) throw new Exception("expexted rate unit: 'min' or 'sec' - "+stok.toString());
+ String unit = stok.sval.toLowerCase();
+ if ("min".equals(unit)) {
+ ((TaskSequence)prevTask).setRate((int)stok.nval,true); // set rate per min
+ } else if ("sec".equals(unit)) {
+ ((TaskSequence)prevTask).setRate((int)stok.nval,false); // set rate per sec
+ } else {
+ throw new Exception("expexted rate unit: 'min' or 'sec' - "+stok.toString());
+ }
+ }
+ }
+ colonOk = false;
+ break;
+
+ case '{' :
+ case '[' :
+ // a sequence
+ // check for sequence name
+ String name = null;
+ stok.nextToken();
+ if (stok.ttype!='"') {
+ stok.pushBack();
+ } else {
+ stok.nextToken();
+ name = stok.sval;
+ stok.nextToken();
+ if (stok.ttype!='"' || name==null || name.length()==0) {
+ throw new Exception("sequence name problem - "+stok.toString());
+ }
+ }
+ // start the sequence
+ TaskSequence seq2 = new TaskSequence(runData, name, currSequence, c=='[');
+ currSequence.addTask(seq2);
+ currSequence = seq2;
+ colonOk = false;
+ break;
+
+ case '>' :
+ currSequence.setNoChildReport();
+ case '}' :
+ case ']' :
+ // end sequence
+ colonOk = true; prevTask = currSequence;
+ currSequence = currSequence.getParent();
+ break;
+
+ } //switch(c)
+ break;
+
+ } //switch(stok.ttype)
+
+ }
+
+ if (sequence != currSequence) {
+ throw new Exception("Unmatched sequences");
+ }
+
+ // remove redundant top level enclosing sequences
+ while (sequence.getRepetitions()==1 && sequence.getRate()==0) {
+ ArrayList t = sequence.getTasks();
+ if (t!=null && t.size()==1) {
+ PerfTask p = (PerfTask) t.get(0);
+ if (p instanceof TaskSequence) {
+ sequence = (TaskSequence) p;
+ continue;
+ }
+ }
+ break;
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#toString()
+ */
+ public String toString() {
+ String newline = System.getProperty("line.separator");
+ StringBuffer sb = new StringBuffer();
+ sb.append(sequence.toString());
+ sb.append(newline);
+ return sb.toString();
+ }
+
+ /**
+ * Execute this algorithm
+ * @throws Exception
+ */
+ public void execute() throws Exception {
+ sequence.doLogic();
+ }
+
+ /**
+ * Expert: for test purposes, return all tasks participating in this algorithm.
+ * @return all tasks participating in this algorithm.
+ */
+ public ArrayList extractTasks() {
+ ArrayList res = new ArrayList();
+ extractTasks(res, sequence);
+ return res;
+ }
+ private void extractTasks (ArrayList extrct, TaskSequence seq) {
+ if (seq==null)
+ return;
+ extrct.add(seq);
+ ArrayList t = sequence.getTasks();
+ if (t==null)
+ return;
+ for (int i = 0; i < t.size(); i++) {
+ PerfTask p = (PerfTask) t.get(0);
+ if (p instanceof TaskSequence) {
+ extractTasks(extrct, (TaskSequence)p);
+ } else {
+ extrct.add(p);
+ }
+ }
+ }
+
+}
+
Propchange: lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/utils/Algorithm.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/utils/Config.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/utils/Config.java?view=diff&rev=524969&r1=524968&r2=524969
==============================================================================
--- lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/utils/Config.java (original)
+++ lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/utils/Config.java Mon Apr 2 16:37:14 2007
@@ -1,324 +1,324 @@
-package org.apache.lucene.benchmark.byTask.utils;
-
-/**
- * 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.
- */
-
-import java.io.BufferedReader;
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.Reader;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Properties;
-import java.util.StringTokenizer;
-
-/**
- * Perf run configuration properties.
- * Numeric peroperty containing ":", e.g. "10:100:5" is interpreted
- * as array of numeric values. It is extracted once, on first use, and
- * maintain an round number to return the appropriate value.
- */
-public class Config {
-
- private static final String NEW_LINE = System.getProperty("line.separator");
-
- private int roundNumber = 0;
- private Properties props;
- private HashMap valByRound = new HashMap();
- private HashMap colForValByRound = new HashMap();
- private String algorithmText;
-
- /**
- * Read both algorithm and config properties.
- * @param algReader from where to read algorithm and config properties.
- * @throws IOException
- */
- public Config (Reader algReader) throws IOException {
- // read alg file to array of lines
- ArrayList lines = new ArrayList();
- BufferedReader r = new BufferedReader(algReader);
- int lastConfigLine=0;
- for (String line = r.readLine(); line!=null; line=r.readLine()) {
- lines.add(line);
- if (line.indexOf('=')>0) {
- lastConfigLine = lines.size();
- }
- }
- r.close();
- // copy props lines to string
- StringBuffer sb = new StringBuffer();
- for (int i=0; i<lastConfigLine; i++) {
- sb.append(lines.get(i));
- sb.append(NEW_LINE);
- }
- // read props from string
- this.props = new Properties();
- props.load(new ByteArrayInputStream(sb.toString().getBytes()));
-
- if (Boolean.valueOf(props.getProperty("print.props","true")).booleanValue()) {
- printProps();
- }
-
- // copy algorithm lines
- sb = new StringBuffer();
- for (int i=lastConfigLine; i<lines.size(); i++) {
- sb.append(lines.get(i));
- sb.append(NEW_LINE);
- }
- algorithmText = sb.toString();
- }
-
- /**
- * Create config without algorithm - usefull for a programmatic perf test.
- * @param props - configuration properties.
- * @throws IOException
- */
- public Config (Properties props) {
- this.props = props;
- if (Boolean.valueOf(props.getProperty("print.props","true")).booleanValue()) {
- printProps();
- }
- }
-
- private void printProps() {
- System.out.println("------------> config properties:");
- for (Iterator it = props.keySet().iterator(); it.hasNext();) {
- String propName = (String) it.next();
- System.out.println(propName + " = " + props.getProperty(propName));
- }
- System.out.println("-------------------------------");
- }
-
- /**
- * Return a string property.
- * @param name name of property.
- * @param dflt default value.
- * @return a string property.
- */
- public String get (String name, String dflt) {
- return props.getProperty(name,dflt);
- }
-
- /**
- * Set a property.
- * Note: once a multiple values property is set, it can no longer be modified.
- * @param name name of property.
- * @param value either single or multiple propery value (multple values are separated by ":")
- * @throws Exception
- */
- public void set (String name, String value) throws Exception {
- if (valByRound.get(name) != null) {
- throw new Exception("Cannot modify a multi value property!");
- }
- props.setProperty(name,value);
- }
-
- /**
- * Return an int property.
- * If the property contain ":", e.g. "10:100:5", it is interpreted
- * as array of ints. It is extracted once, on first call
- * to get() it, and a by-round-value is returned.
- * @param name name of property
- * @param dflt default value
- * @return a int property.
- */
- public int get (String name, int dflt) {
- // use value by round if already parsed
- int vals[] = (int[]) valByRound.get(name);
- if (vals != null) {
- return vals[roundNumber % vals.length];
- }
- // done if not by round
- String sval = props.getProperty(name,""+dflt);
- if (sval.indexOf(":")<0) {
- return Integer.parseInt(sval);
- }
- // first time this prop is extracted by round
- int k = sval.indexOf(":");
- String colName = sval.substring(0,k);
- sval = sval.substring(k+1);
- colForValByRound.put(name,colName);
- vals = propToIntArray(sval);
- valByRound.put(name,vals);
- return vals[roundNumber % vals.length];
- }
-
- /**
- * Return a boolean property.
- * If the property contain ":", e.g. "true.true.false", it is interpreted
- * as array of boleans. It is extracted once, on first call
- * to get() it, and a by-round-value is returned.
- * @param name name of property
- * @param dflt default value
- * @return a int property.
- */
- public boolean get (String name, boolean dflt) {
- // use value by round if already parsed
- boolean vals[] = (boolean[]) valByRound.get(name);
- if (vals != null) {
- return vals[roundNumber % vals.length];
- }
- // done if not by round
- String sval = props.getProperty(name,""+dflt);
- if (sval.indexOf(":")<0) {
- return Boolean.valueOf(sval).booleanValue();
- }
- // first time this prop is extracted by round
- int k = sval.indexOf(":");
- String colName = sval.substring(0,k);
- sval = sval.substring(k+1);
- colForValByRound.put(name,colName);
- vals = propToBooleanArray(sval);
- valByRound.put(name,vals);
- return vals[roundNumber % vals.length];
- }
-
- /**
- * Increment the round number, for config values that are extracted by round number.
- * @return the new round number.
- */
- public int newRound () {
- roundNumber++;
-
- // log changes in values
- if (valByRound.size()>0) {
- StringBuffer sb = new StringBuffer("--> Round ").append(roundNumber-1).append("-->").append(roundNumber).append(": ");
- for (Iterator iter = valByRound.keySet().iterator(); iter.hasNext();) {
- String name = (String) iter.next();
- Object a = valByRound.get(name);
- if (a instanceof int[]) {
- int ai[] = (int[]) a;
- int n1 = (roundNumber-1)%ai.length;
- int n2 = roundNumber%ai.length;
- sb.append(" ").append(name).append(":").append(ai[n1]).append("-->").append(ai[n2]);
- } else {
- boolean ab[] = (boolean[]) a;
- int n1 = (roundNumber-1)%ab.length;
- int n2 = roundNumber%ab.length;
- sb.append(" ").append(name).append(":").append(ab[n1]).append("-->").append(ab[n2]);
- }
- }
- System.out.println();
- System.out.println(sb.toString());
- System.out.println();
- }
-
- return roundNumber;
- }
-
- // extract properties to array, e.g. for "10.100.5" return int[]{10,100,5}.
- private int[] propToIntArray (String s) {
- if (s.indexOf(":")<0) {
- return new int [] { Integer.parseInt(s) };
- }
-
- ArrayList a = new ArrayList();
- StringTokenizer st = new StringTokenizer(s,":");
- while (st.hasMoreTokens()) {
- String t = st.nextToken();
- a.add(new Integer(t));
- }
- int res[] = new int[a.size()];
- for (int i=0; i<a.size(); i++) {
- res[i] = ((Integer) a.get(i)).intValue();
- }
- return res;
- }
-
- // extract properties to array, e.g. for "true.true.false" return booleab[]{true,false,false}.
- private boolean[] propToBooleanArray (String s) {
- if (s.indexOf(":")<0) {
- return new boolean [] { Boolean.valueOf(s).booleanValue() };
- }
-
- ArrayList a = new ArrayList();
- StringTokenizer st = new StringTokenizer(s,":");
- while (st.hasMoreTokens()) {
- String t = st.nextToken();
- a.add(new Boolean(t));
- }
- boolean res[] = new boolean[a.size()];
- for (int i=0; i<a.size(); i++) {
- res[i] = ((Boolean) a.get(i)).booleanValue();
- }
- return res;
- }
-
- /**
- * @return names of params set by round, for reports title
- */
- public String getColsNamesForValsByRound() {
- if (colForValByRound.size()==0) {
- return "";
- }
- StringBuffer sb = new StringBuffer();
- for (Iterator it = colForValByRound.keySet().iterator(); it.hasNext();) {
- String name = (String) it.next();
- String colName = (String) colForValByRound.get(name);
- sb.append(" ").append(colName);
- }
- return sb.toString();
- }
-
- /**
- * @return values of params set by round, for reports lines.
- */
- public String getColsValuesForValsByRound(int roundNum) {
- if (colForValByRound.size()==0) {
- return "";
- }
- StringBuffer sb = new StringBuffer();
- for (Iterator it = colForValByRound.keySet().iterator(); it.hasNext();) {
- String name = (String) it.next();
- String colName = (String) colForValByRound.get(name);
- String template = " "+colName;
- if (roundNum<0) {
- // just append blanks
- sb.append(Format.formatPaddLeft("-",template));
- } else {
- // append actual values, for that round
- Object a = valByRound.get(name);
- if (a instanceof int[]) {
- int ai[] = (int[]) a;
- int n = roundNum % ai.length;
- sb.append(Format.format(ai[n],template));
- } else {
- boolean ab[] = (boolean[]) a;
- int n = roundNum % ab.length;
- sb.append(Format.formatPaddLeft(""+ab[n],template));
- }
- }
- }
- return sb.toString();
- }
-
- /**
- * @return the round number.
- */
- public int getRoundNumber() {
- return roundNumber;
- }
-
- /**
- * @return Returns the algorithmText.
- */
- public String getAlgorithmText() {
- return algorithmText;
- }
-
-}
+package org.apache.lucene.benchmark.byTask.utils;
+
+/**
+ * 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.
+ */
+
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.Reader;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Properties;
+import java.util.StringTokenizer;
+
+/**
+ * Perf run configuration properties.
+ * Numeric peroperty containing ":", e.g. "10:100:5" is interpreted
+ * as array of numeric values. It is extracted once, on first use, and
+ * maintain an round number to return the appropriate value.
+ */
+public class Config {
+
+ private static final String NEW_LINE = System.getProperty("line.separator");
+
+ private int roundNumber = 0;
+ private Properties props;
+ private HashMap valByRound = new HashMap();
+ private HashMap colForValByRound = new HashMap();
+ private String algorithmText;
+
+ /**
+ * Read both algorithm and config properties.
+ * @param algReader from where to read algorithm and config properties.
+ * @throws IOException
+ */
+ public Config (Reader algReader) throws IOException {
+ // read alg file to array of lines
+ ArrayList lines = new ArrayList();
+ BufferedReader r = new BufferedReader(algReader);
+ int lastConfigLine=0;
+ for (String line = r.readLine(); line!=null; line=r.readLine()) {
+ lines.add(line);
+ if (line.indexOf('=')>0) {
+ lastConfigLine = lines.size();
+ }
+ }
+ r.close();
+ // copy props lines to string
+ StringBuffer sb = new StringBuffer();
+ for (int i=0; i<lastConfigLine; i++) {
+ sb.append(lines.get(i));
+ sb.append(NEW_LINE);
+ }
+ // read props from string
+ this.props = new Properties();
+ props.load(new ByteArrayInputStream(sb.toString().getBytes()));
+
+ if (Boolean.valueOf(props.getProperty("print.props","true")).booleanValue()) {
+ printProps();
+ }
+
+ // copy algorithm lines
+ sb = new StringBuffer();
+ for (int i=lastConfigLine; i<lines.size(); i++) {
+ sb.append(lines.get(i));
+ sb.append(NEW_LINE);
+ }
+ algorithmText = sb.toString();
+ }
+
+ /**
+ * Create config without algorithm - usefull for a programmatic perf test.
+ * @param props - configuration properties.
+ * @throws IOException
+ */
+ public Config (Properties props) {
+ this.props = props;
+ if (Boolean.valueOf(props.getProperty("print.props","true")).booleanValue()) {
+ printProps();
+ }
+ }
+
+ private void printProps() {
+ System.out.println("------------> config properties:");
+ for (Iterator it = props.keySet().iterator(); it.hasNext();) {
+ String propName = (String) it.next();
+ System.out.println(propName + " = " + props.getProperty(propName));
+ }
+ System.out.println("-------------------------------");
+ }
+
+ /**
+ * Return a string property.
+ * @param name name of property.
+ * @param dflt default value.
+ * @return a string property.
+ */
+ public String get (String name, String dflt) {
+ return props.getProperty(name,dflt);
+ }
+
+ /**
+ * Set a property.
+ * Note: once a multiple values property is set, it can no longer be modified.
+ * @param name name of property.
+ * @param value either single or multiple propery value (multple values are separated by ":")
+ * @throws Exception
+ */
+ public void set (String name, String value) throws Exception {
+ if (valByRound.get(name) != null) {
+ throw new Exception("Cannot modify a multi value property!");
+ }
+ props.setProperty(name,value);
+ }
+
+ /**
+ * Return an int property.
+ * If the property contain ":", e.g. "10:100:5", it is interpreted
+ * as array of ints. It is extracted once, on first call
+ * to get() it, and a by-round-value is returned.
+ * @param name name of property
+ * @param dflt default value
+ * @return a int property.
+ */
+ public int get (String name, int dflt) {
+ // use value by round if already parsed
+ int vals[] = (int[]) valByRound.get(name);
+ if (vals != null) {
+ return vals[roundNumber % vals.length];
+ }
+ // done if not by round
+ String sval = props.getProperty(name,""+dflt);
+ if (sval.indexOf(":")<0) {
+ return Integer.parseInt(sval);
+ }
+ // first time this prop is extracted by round
+ int k = sval.indexOf(":");
+ String colName = sval.substring(0,k);
+ sval = sval.substring(k+1);
+ colForValByRound.put(name,colName);
+ vals = propToIntArray(sval);
+ valByRound.put(name,vals);
+ return vals[roundNumber % vals.length];
+ }
+
+ /**
+ * Return a boolean property.
+ * If the property contain ":", e.g. "true.true.false", it is interpreted
+ * as array of boleans. It is extracted once, on first call
+ * to get() it, and a by-round-value is returned.
+ * @param name name of property
+ * @param dflt default value
+ * @return a int property.
+ */
+ public boolean get (String name, boolean dflt) {
+ // use value by round if already parsed
+ boolean vals[] = (boolean[]) valByRound.get(name);
+ if (vals != null) {
+ return vals[roundNumber % vals.length];
+ }
+ // done if not by round
+ String sval = props.getProperty(name,""+dflt);
+ if (sval.indexOf(":")<0) {
+ return Boolean.valueOf(sval).booleanValue();
+ }
+ // first time this prop is extracted by round
+ int k = sval.indexOf(":");
+ String colName = sval.substring(0,k);
+ sval = sval.substring(k+1);
+ colForValByRound.put(name,colName);
+ vals = propToBooleanArray(sval);
+ valByRound.put(name,vals);
+ return vals[roundNumber % vals.length];
+ }
+
+ /**
+ * Increment the round number, for config values that are extracted by round number.
+ * @return the new round number.
+ */
+ public int newRound () {
+ roundNumber++;
+
+ // log changes in values
+ if (valByRound.size()>0) {
+ StringBuffer sb = new StringBuffer("--> Round ").append(roundNumber-1).append("-->").append(roundNumber).append(": ");
+ for (Iterator iter = valByRound.keySet().iterator(); iter.hasNext();) {
+ String name = (String) iter.next();
+ Object a = valByRound.get(name);
+ if (a instanceof int[]) {
+ int ai[] = (int[]) a;
+ int n1 = (roundNumber-1)%ai.length;
+ int n2 = roundNumber%ai.length;
+ sb.append(" ").append(name).append(":").append(ai[n1]).append("-->").append(ai[n2]);
+ } else {
+ boolean ab[] = (boolean[]) a;
+ int n1 = (roundNumber-1)%ab.length;
+ int n2 = roundNumber%ab.length;
+ sb.append(" ").append(name).append(":").append(ab[n1]).append("-->").append(ab[n2]);
+ }
+ }
+ System.out.println();
+ System.out.println(sb.toString());
+ System.out.println();
+ }
+
+ return roundNumber;
+ }
+
+ // extract properties to array, e.g. for "10.100.5" return int[]{10,100,5}.
+ private int[] propToIntArray (String s) {
+ if (s.indexOf(":")<0) {
+ return new int [] { Integer.parseInt(s) };
+ }
+
+ ArrayList a = new ArrayList();
+ StringTokenizer st = new StringTokenizer(s,":");
+ while (st.hasMoreTokens()) {
+ String t = st.nextToken();
+ a.add(new Integer(t));
+ }
+ int res[] = new int[a.size()];
+ for (int i=0; i<a.size(); i++) {
+ res[i] = ((Integer) a.get(i)).intValue();
+ }
+ return res;
+ }
+
+ // extract properties to array, e.g. for "true.true.false" return booleab[]{true,false,false}.
+ private boolean[] propToBooleanArray (String s) {
+ if (s.indexOf(":")<0) {
+ return new boolean [] { Boolean.valueOf(s).booleanValue() };
+ }
+
+ ArrayList a = new ArrayList();
+ StringTokenizer st = new StringTokenizer(s,":");
+ while (st.hasMoreTokens()) {
+ String t = st.nextToken();
+ a.add(new Boolean(t));
+ }
+ boolean res[] = new boolean[a.size()];
+ for (int i=0; i<a.size(); i++) {
+ res[i] = ((Boolean) a.get(i)).booleanValue();
+ }
+ return res;
+ }
+
+ /**
+ * @return names of params set by round, for reports title
+ */
+ public String getColsNamesForValsByRound() {
+ if (colForValByRound.size()==0) {
+ return "";
+ }
+ StringBuffer sb = new StringBuffer();
+ for (Iterator it = colForValByRound.keySet().iterator(); it.hasNext();) {
+ String name = (String) it.next();
+ String colName = (String) colForValByRound.get(name);
+ sb.append(" ").append(colName);
+ }
+ return sb.toString();
+ }
+
+ /**
+ * @return values of params set by round, for reports lines.
+ */
+ public String getColsValuesForValsByRound(int roundNum) {
+ if (colForValByRound.size()==0) {
+ return "";
+ }
+ StringBuffer sb = new StringBuffer();
+ for (Iterator it = colForValByRound.keySet().iterator(); it.hasNext();) {
+ String name = (String) it.next();
+ String colName = (String) colForValByRound.get(name);
+ String template = " "+colName;
+ if (roundNum<0) {
+ // just append blanks
+ sb.append(Format.formatPaddLeft("-",template));
+ } else {
+ // append actual values, for that round
+ Object a = valByRound.get(name);
+ if (a instanceof int[]) {
+ int ai[] = (int[]) a;
+ int n = roundNum % ai.length;
+ sb.append(Format.format(ai[n],template));
+ } else {
+ boolean ab[] = (boolean[]) a;
+ int n = roundNum % ab.length;
+ sb.append(Format.formatPaddLeft(""+ab[n],template));
+ }
+ }
+ }
+ return sb.toString();
+ }
+
+ /**
+ * @return the round number.
+ */
+ public int getRoundNumber() {
+ return roundNumber;
+ }
+
+ /**
+ * @return Returns the algorithmText.
+ */
+ public String getAlgorithmText() {
+ return algorithmText;
+ }
+
+}
Propchange: lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/utils/Config.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/utils/FileUtils.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/utils/FileUtils.java?view=diff&rev=524969&r1=524968&r2=524969
==============================================================================
--- lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/utils/FileUtils.java (original)
+++ lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/utils/FileUtils.java Mon Apr 2 16:37:14 2007
@@ -1,54 +1,54 @@
-package org.apache.lucene.benchmark.byTask.utils;
-
-/**
- * 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.
- */
-
-import java.io.File;
-import java.io.IOException;
-
-/**
- * File utilities.
- */
-public class FileUtils {
-
- /**
- * Delete files and directories, even if non-empty.
- *
- * @param dir file or directory
- * @return true on success, false if no or part of files have been deleted
- * @throws java.io.IOException
- */
- public static boolean fullyDelete(File dir) throws IOException {
- if (dir == null || !dir.exists()) return false;
- File contents[] = dir.listFiles();
- if (contents != null) {
- for (int i = 0; i < contents.length; i++) {
- if (contents[i].isFile()) {
- if (!contents[i].delete()) {
- return false;
- }
- } else {
- if (!fullyDelete(contents[i])) {
- return false;
- }
- }
- }
- }
- return dir.delete();
- }
-
-}
+package org.apache.lucene.benchmark.byTask.utils;
+
+/**
+ * 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.
+ */
+
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * File utilities.
+ */
+public class FileUtils {
+
+ /**
+ * Delete files and directories, even if non-empty.
+ *
+ * @param dir file or directory
+ * @return true on success, false if no or part of files have been deleted
+ * @throws java.io.IOException
+ */
+ public static boolean fullyDelete(File dir) throws IOException {
+ if (dir == null || !dir.exists()) return false;
+ File contents[] = dir.listFiles();
+ if (contents != null) {
+ for (int i = 0; i < contents.length; i++) {
+ if (contents[i].isFile()) {
+ if (!contents[i].delete()) {
+ return false;
+ }
+ } else {
+ if (!fullyDelete(contents[i])) {
+ return false;
+ }
+ }
+ }
+ }
+ return dir.delete();
+ }
+
+}
Propchange: lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/utils/FileUtils.java
------------------------------------------------------------------------------
svn:eol-style = native