Index: lucene/core/src/test/org/apache/lucene/store/TestRateLimiter.java =================================================================== --- lucene/core/src/test/org/apache/lucene/store/TestRateLimiter.java (revision 0) +++ lucene/core/src/test/org/apache/lucene/store/TestRateLimiter.java (revision 0) @@ -0,0 +1,40 @@ +package org.apache.lucene.store; + +/* + * 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.concurrent.TimeUnit; + +import org.apache.lucene.store.RateLimiter.SimpleRateLimiter; +import org.apache.lucene.util.LuceneTestCase; + +/** + * Simple testcase for RateLimiter.SimpleRateLimiter + */ +public final class TestRateLimiter extends LuceneTestCase { + + public void testPause() { + SimpleRateLimiter limiter = new SimpleRateLimiter(10); // 10 MB / Sec + limiter.pause(2);//init + long pause = 0; + for (int i = 0; i < 3; i++) { + pause += limiter.pause(4 * 1024 * 1024); // fire up 3 * 4 MB + } + final long convert = TimeUnit.MILLISECONDS.convert(pause, TimeUnit.NANOSECONDS); + assertTrue("we should sleep less than 2 seconds but did: " + convert + " millis", convert < 2000l); + assertTrue("we should sleep at least 1 second but did only: " + convert + " millis", convert > 1000l); + } +} Property changes on: lucene/core/src/test/org/apache/lucene/store/TestRateLimiter.java ___________________________________________________________________ Added: svn:keywords + Date Author Id Revision HeadURL Added: svn:eol-style + native Index: lucene/core/src/java/org/apache/lucene/store/RateLimiter.java =================================================================== --- lucene/core/src/java/org/apache/lucene/store/RateLimiter.java (revision 1457147) +++ lucene/core/src/java/org/apache/lucene/store/RateLimiter.java (working copy) @@ -97,7 +97,8 @@ // TODO: this is purely instantaneous rate; maybe we // should also offer decayed recent history one? final long targetNS = lastNS = lastNS + ((long) (bytes * nsPerByte)); - long curNS = System.nanoTime(); + final long startNS; + long curNS = startNS = System.nanoTime(); if (lastNS < curNS) { lastNS = curNS; } @@ -117,7 +118,7 @@ } break; } - return targetNS; + return curNS - startNS; } } } Index: lucene/CHANGES.txt =================================================================== --- lucene/CHANGES.txt (revision 1457147) +++ lucene/CHANGES.txt (working copy) @@ -109,6 +109,9 @@ * LUCENE-4828: BooleanQuery no longer extracts terms from its MUST_NOT clauses. (Mike McCandless) +* LUCENE-4836: Fix SimpleRateLimiter#pause to return the actual times spend + sleeping instead of the wakeup timestamp in nano seconds. (Simon Willnauer) + ======================= Lucene 4.2.0 ======================= Changes in backwards compatibility policy