You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ho...@apache.org on 2013/09/04 00:06:00 UTC
svn commit: r1519865 - in /lucene/dev/branches/branch_4x: ./ dev-tools/
lucene/ lucene/analysis/
lucene/analysis/icu/src/java/org/apache/lucene/collation/ lucene/backwards/
lucene/benchmark/ lucene/classification/ lucene/classification/src/
lucene/code...
Author: hossman
Date: Tue Sep 3 22:05:59 2013
New Revision: 1519865
URL: http://svn.apache.org/r1519865
Log:
SOLR-5206: Fixed OpenExchangeRatesOrgProvider to use refreshInterval correctly (merge r1519858)
Modified:
lucene/dev/branches/branch_4x/ (props changed)
lucene/dev/branches/branch_4x/dev-tools/ (props changed)
lucene/dev/branches/branch_4x/lucene/ (props changed)
lucene/dev/branches/branch_4x/lucene/BUILD.txt (props changed)
lucene/dev/branches/branch_4x/lucene/CHANGES.txt (props changed)
lucene/dev/branches/branch_4x/lucene/JRE_VERSION_MIGRATION.txt (props changed)
lucene/dev/branches/branch_4x/lucene/LICENSE.txt (props changed)
lucene/dev/branches/branch_4x/lucene/MIGRATE.txt (props changed)
lucene/dev/branches/branch_4x/lucene/NOTICE.txt (props changed)
lucene/dev/branches/branch_4x/lucene/README.txt (props changed)
lucene/dev/branches/branch_4x/lucene/SYSTEM_REQUIREMENTS.txt (props changed)
lucene/dev/branches/branch_4x/lucene/analysis/ (props changed)
lucene/dev/branches/branch_4x/lucene/analysis/icu/src/java/org/apache/lucene/collation/ICUCollationKeyFilterFactory.java (props changed)
lucene/dev/branches/branch_4x/lucene/backwards/ (props changed)
lucene/dev/branches/branch_4x/lucene/benchmark/ (props changed)
lucene/dev/branches/branch_4x/lucene/build.xml (props changed)
lucene/dev/branches/branch_4x/lucene/classification/ (props changed)
lucene/dev/branches/branch_4x/lucene/classification/build.xml (props changed)
lucene/dev/branches/branch_4x/lucene/classification/ivy.xml (props changed)
lucene/dev/branches/branch_4x/lucene/classification/src/ (props changed)
lucene/dev/branches/branch_4x/lucene/codecs/ (props changed)
lucene/dev/branches/branch_4x/lucene/common-build.xml (props changed)
lucene/dev/branches/branch_4x/lucene/core/ (props changed)
lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java (props changed)
lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/index.40.cfs.zip (props changed)
lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/index.40.nocfs.zip (props changed)
lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/index.40.optimized.cfs.zip (props changed)
lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/index.40.optimized.nocfs.zip (props changed)
lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/search/TestSort.java (props changed)
lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/search/TestSortDocValues.java (props changed)
lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/search/TestSortRandom.java (props changed)
lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/search/TestTopFieldCollector.java (props changed)
lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/search/TestTotalHitCountCollector.java (props changed)
lucene/dev/branches/branch_4x/lucene/demo/ (props changed)
lucene/dev/branches/branch_4x/lucene/facet/ (props changed)
lucene/dev/branches/branch_4x/lucene/grouping/ (props changed)
lucene/dev/branches/branch_4x/lucene/highlighter/ (props changed)
lucene/dev/branches/branch_4x/lucene/ivy-settings.xml (props changed)
lucene/dev/branches/branch_4x/lucene/join/ (props changed)
lucene/dev/branches/branch_4x/lucene/licenses/ (props changed)
lucene/dev/branches/branch_4x/lucene/memory/ (props changed)
lucene/dev/branches/branch_4x/lucene/misc/ (props changed)
lucene/dev/branches/branch_4x/lucene/module-build.xml (props changed)
lucene/dev/branches/branch_4x/lucene/queries/ (props changed)
lucene/dev/branches/branch_4x/lucene/queries/src/test/org/apache/lucene/queries/function/TestFunctionQuerySort.java (props changed)
lucene/dev/branches/branch_4x/lucene/queryparser/ (props changed)
lucene/dev/branches/branch_4x/lucene/replicator/ (props changed)
lucene/dev/branches/branch_4x/lucene/sandbox/ (props changed)
lucene/dev/branches/branch_4x/lucene/site/ (props changed)
lucene/dev/branches/branch_4x/lucene/spatial/ (props changed)
lucene/dev/branches/branch_4x/lucene/suggest/ (props changed)
lucene/dev/branches/branch_4x/lucene/test-framework/ (props changed)
lucene/dev/branches/branch_4x/lucene/tools/ (props changed)
lucene/dev/branches/branch_4x/solr/ (props changed)
lucene/dev/branches/branch_4x/solr/CHANGES.txt (contents, props changed)
lucene/dev/branches/branch_4x/solr/LICENSE.txt (props changed)
lucene/dev/branches/branch_4x/solr/NOTICE.txt (props changed)
lucene/dev/branches/branch_4x/solr/README.txt (props changed)
lucene/dev/branches/branch_4x/solr/SYSTEM_REQUIREMENTS.txt (props changed)
lucene/dev/branches/branch_4x/solr/build.xml (props changed)
lucene/dev/branches/branch_4x/solr/cloud-dev/ (props changed)
lucene/dev/branches/branch_4x/solr/common-build.xml (props changed)
lucene/dev/branches/branch_4x/solr/contrib/ (props changed)
lucene/dev/branches/branch_4x/solr/core/ (props changed)
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/schema/OpenExchangeRatesOrgProvider.java
lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/core/TestConfig.java (props changed)
lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/schema/OpenExchangeRatesOrgProviderTest.java
lucene/dev/branches/branch_4x/solr/example/ (props changed)
lucene/dev/branches/branch_4x/solr/licenses/ (props changed)
lucene/dev/branches/branch_4x/solr/licenses/httpclient-LICENSE-ASL.txt (props changed)
lucene/dev/branches/branch_4x/solr/licenses/httpclient-NOTICE.txt (props changed)
lucene/dev/branches/branch_4x/solr/licenses/httpcore-LICENSE-ASL.txt (props changed)
lucene/dev/branches/branch_4x/solr/licenses/httpcore-NOTICE.txt (props changed)
lucene/dev/branches/branch_4x/solr/licenses/httpmime-LICENSE-ASL.txt (props changed)
lucene/dev/branches/branch_4x/solr/licenses/httpmime-NOTICE.txt (props changed)
lucene/dev/branches/branch_4x/solr/scripts/ (props changed)
lucene/dev/branches/branch_4x/solr/site/ (props changed)
lucene/dev/branches/branch_4x/solr/solrj/ (props changed)
lucene/dev/branches/branch_4x/solr/test-framework/ (props changed)
lucene/dev/branches/branch_4x/solr/webapp/ (props changed)
Modified: lucene/dev/branches/branch_4x/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/CHANGES.txt?rev=1519865&r1=1519864&r2=1519865&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/CHANGES.txt (original)
+++ lucene/dev/branches/branch_4x/solr/CHANGES.txt Tue Sep 3 22:05:59 2013
@@ -147,6 +147,9 @@ Bug Fixes
* SOLR-3852: Fixed ZookeeperInfoServlet so that the SolrCloud Admin UI pages will
work even if ZK contains nodes with data which are not utf8 text. (hossman)
+* SOLR-5206: Fixed OpenExchangeRatesOrgProvider to use refreshInterval correctly
+ (Catalin, hossman)
+
Optimizations
----------------------
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/schema/OpenExchangeRatesOrgProvider.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/schema/OpenExchangeRatesOrgProvider.java?rev=1519865&r1=1519864&r2=1519865&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/schema/OpenExchangeRatesOrgProvider.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/schema/OpenExchangeRatesOrgProvider.java Tue Sep 3 22:05:59 2013
@@ -59,7 +59,8 @@ public class OpenExchangeRatesOrgProvide
protected static final String DEFAULT_REFRESH_INTERVAL = "1440";
protected String ratesFileLocation;
- protected int refreshInterval;
+ // configured in minutes, but stored in seconds for quicker math
+ protected int refreshIntervalSeconds;
protected ResourceLoader resourceLoader;
protected OpenExchangeRates rates;
@@ -84,7 +85,7 @@ public class OpenExchangeRatesOrgProvide
throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "Cannot get exchange rate; currency was null.");
}
- if (rates.getTimestamp() + refreshInterval*60*1000 > System.currentTimeMillis()) {
+ if ((rates.getTimestamp() + refreshIntervalSeconds)*1000 < System.currentTimeMillis()) {
log.debug("Refresh interval has expired. Refreshing exchange rates.");
reload();
}
@@ -159,13 +160,14 @@ public class OpenExchangeRatesOrgProvide
if (null == ratesFileLocation) {
throw new SolrException(ErrorCode.SERVER_ERROR, "Init param must be specified: " + PARAM_RATES_FILE_LOCATION);
}
- refreshInterval = Integer.parseInt(getParam(params.get(PARAM_REFRESH_INTERVAL), DEFAULT_REFRESH_INTERVAL));
+ int refreshInterval = Integer.parseInt(getParam(params.get(PARAM_REFRESH_INTERVAL), DEFAULT_REFRESH_INTERVAL));
// Force a refresh interval of minimum one hour, since the API does not offer better resolution
if (refreshInterval < 60) {
refreshInterval = 60;
log.warn("Specified refreshInterval was too small. Setting to 60 minutes which is the update rate of openexchangerates.org");
}
log.info("Initialized with rates="+ratesFileLocation+", refreshInterval="+refreshInterval+".");
+ refreshIntervalSeconds = refreshInterval * 60;
} catch (SolrException e1) {
throw e1;
} catch (Exception e2) {
@@ -191,7 +193,7 @@ public class OpenExchangeRatesOrgProvide
/**
* A simple class encapsulating the JSON data from openexchangerates.org
*/
- class OpenExchangeRates {
+ static class OpenExchangeRates {
private Map<String, Double> rates;
private String baseCurrency;
private long timestamp;
@@ -261,6 +263,12 @@ public class OpenExchangeRatesOrgProvide
public long getTimestamp() {
return timestamp;
}
+ /** Package protected method for test purposes
+ * @lucene.internal
+ */
+ void setTimestamp(long timestamp) {
+ this.timestamp = timestamp;
+ }
public String getDisclaimer() {
return disclaimer;
Modified: lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/schema/OpenExchangeRatesOrgProviderTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/schema/OpenExchangeRatesOrgProviderTest.java?rev=1519865&r1=1519864&r2=1519865&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/schema/OpenExchangeRatesOrgProviderTest.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/schema/OpenExchangeRatesOrgProviderTest.java Tue Sep 3 22:05:59 2013
@@ -30,10 +30,13 @@ import java.util.Map;
* Tests currency field type.
*/
public class OpenExchangeRatesOrgProviderTest extends SolrTestCaseJ4 {
+ private final static long HARDCODED_TEST_TIMESTAMP = 1332070464L;
+
OpenExchangeRatesOrgProvider oerp;
ResourceLoader loader;
private final Map<String,String> mockParams = new HashMap<String,String>();
+
@Override
@Before
public void setUp() throws Exception {
@@ -50,18 +53,22 @@ public class OpenExchangeRatesOrgProvide
@Test
public void testInit() throws Exception {
oerp.init(mockParams);
+ // don't inform, we don't want to hit any of these URLs
+
assertEquals("Wrong url",
"open-exchange-rates.json", oerp.ratesFileLocation);
- assertEquals("Wrong default interval", 1440, oerp.refreshInterval);
+ assertEquals("Wrong default interval", (1440*60), oerp.refreshIntervalSeconds);
Map<String,String> params = new HashMap<String,String>();
params.put(OpenExchangeRatesOrgProvider.PARAM_RATES_FILE_LOCATION,
"http://foo.bar/baz");
params.put(OpenExchangeRatesOrgProvider.PARAM_REFRESH_INTERVAL, "100");
+
oerp.init(params);
assertEquals("Wrong param set url",
"http://foo.bar/baz", oerp.ratesFileLocation);
- assertEquals("Wrong param interval", 100, oerp.refreshInterval);
+ assertEquals("Wrong param interval", (100*60), oerp.refreshIntervalSeconds);
+
}
@Test
@@ -76,15 +83,31 @@ public class OpenExchangeRatesOrgProvide
oerp.init(mockParams);
oerp.inform(loader);
assertEquals(81.29D, oerp.getExchangeRate("USD", "JPY"), 0.0D);
+ assertEquals("USD", oerp.rates.getBaseCurrency());
}
@Test
public void testReload() {
+ // reminder: interval is in minutes
+ mockParams.put(OpenExchangeRatesOrgProvider.PARAM_REFRESH_INTERVAL, "100");
oerp.init(mockParams);
oerp.inform(loader);
- assertTrue(oerp.reload());
- assertEquals("USD", oerp.rates.getBaseCurrency());
- assertEquals(new Long(1332070464L), new Long(oerp.rates.getTimestamp()));
+
+ // reminder: timestamp is in seconds
+ assertEquals(HARDCODED_TEST_TIMESTAMP, oerp.rates.getTimestamp());
+
+ // modify the timestamp to be "current" then fetch a rate and ensure no reload
+ final long currentTimestamp = (long) (System.currentTimeMillis() / 1000);
+ oerp.rates.setTimestamp(currentTimestamp);
+ assertEquals(81.29D, oerp.getExchangeRate("USD", "JPY"), 0.0D);
+ assertEquals(currentTimestamp, oerp.rates.getTimestamp());
+
+ // roll back clock on timestamp and ensure rate fetch does reload
+ oerp.rates.setTimestamp(currentTimestamp - (101 * 60));
+ assertEquals(81.29D, oerp.getExchangeRate("USD", "JPY"), 0.0D);
+ assertEquals("timestamp wasn't reset to hardcoded value, indicating no reload",
+ HARDCODED_TEST_TIMESTAMP, oerp.rates.getTimestamp());
+
}
@Test(expected=SolrException.class)