[
https://issues.apache.org/jira/browse/LANG-1355?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16198751#comment-16198751
]
ASF GitHub Bot commented on LANG-1355:
--------------------------------------
Github user chonton commented on a diff in the pull request:
https://github.com/apache/commons-lang/pull/296#discussion_r143749105
--- Diff: src/test/java/org/apache/commons/lang3/time/GmtTimeZoneTest.java
---
@@ -0,0 +1,80 @@
+/*
+ * 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.commons.lang3.time;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * Tests for GmtTimeZone
+ */
+public class GmtTimeZoneTest {
+
+ @Test(expected = IllegalArgumentException.class)
+ public void hoursOutOfRange() {
+ new GmtTimeZone(false, 24, 0);
+ }
+
+ @Test
+ public void hoursInRange() {
+ Assert.assertEquals(23 * 60 * 60 * 1000, new GmtTimeZone(false,
23, 0).getRawOffset());
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void minutesOutOfRange() {
+ Assert.assertEquals(0, new GmtTimeZone(false, 60, 0));
--- End diff --
great catch! thanks.
done.
> TimeZone.getTimeZone() in FastDateParser causes resource contention
> -------------------------------------------------------------------
>
> Key: LANG-1355
> URL: https://issues.apache.org/jira/browse/LANG-1355
> Project: Commons Lang
> Issue Type: Bug
> Components: lang.time.*
> Affects Versions: 3.6
> Environment: Windows
> Reporter: Keith Boone
> Assignee: Charles Honton
> Original Estimate: 48h
> Remaining Estimate: 48h
>
> Under heavy load we are seeing contention in FastDateParser.parse() on calls
> to TimeZone.getTimeZone(). TimeZone.getTimeZone() is a synchronized static
> in the Oracle JVM.
> Our proposed solution is to add a class TimeZoneCache containing a single
> method getTimeZone() which gets the requested time zone from a ConcurrentMap,
> and if not present, looks it up via TimeZone.getTimeZone() and caches it
> before returning it.
> Then replace calls to TimeZone.getTimeZone() in FastDateParser ( and
> whereever else) to calls to TimeZoneCache.getTimeZone().
> The reason to add a separate class is because it can also be used by other
> applications which heavily parse or format or do other things where TimeZone
> is repeatedly needed.
> Under extreme load we have seen an 50:1 improvement in calls to
> FastDateParser.parse(). This saves about a ms/call in our test environment,
> and reduces contention.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)