Commit Graph

1440 Commits

Author SHA1 Message Date
Vinod Kumar Vavilapalli 76cf2250de YARN-2685. Fixed a bug in CommonNodeLabelsManager that caused wrong resource tracking per label when a host runs multiple node-managers. Contributed by Wangda Tan.
(cherry picked from commit b3056c266a)
2014-10-15 18:48:36 -07:00
Vinod Kumar Vavilapalli e8e3a36213 YARN-2496. Enhanced Capacity Scheduler to have basic support for allocating resources based on node-labels. Contributed by Wangda Tan.
YARN-2500. Ehnaced ResourceManager to support schedulers allocating resources based on node-labels. Contributed by Wangda Tan.

(cherry picked from commit f2ea555ac6)
2014-10-15 18:34:19 -07:00
Jian He f93d2ea27e YARN-2312. Deprecated old ContainerId#getId API and updated MapReduce to use ContainerId#getContainerId instead. Contributed by Tsuyoshi OZAWA 2014-10-15 15:28:26 -07:00
Zhijie Shen bec165e163 YARN-2656. Made RM web services authentication filter support proxy user. Contributed by Varun Vasudev and Zhijie Shen.
(cherry picked from commit 1220bb72d4)
2014-10-14 21:56:44 -07:00
Zhijie Shen 8aeda20b25 HADOOP-11181. Generalized o.a.h.s.t.d.DelegationTokenManager to handle all sub-classes of AbstractDelegationTokenIdentifier. Contributed by Zhijie Shen.
(cherry picked from commit cdce88376a)
2014-10-14 11:37:28 -07:00
Karthik Kambatla 88455173e8 YARN-2566. DefaultContainerExecutor should pick a working directory randomly. (Zhihai Xu via kasha)
(cherry picked from commit cc93e7e683)
2014-10-13 16:32:42 -07:00
Karthik Kambatla a1116b56a4 YARN-2641. Decommission nodes on -refreshNodes instead of next NM-RM heartbeat. (Zhihai Xu via kasha)
(cherry picked from commit da709a2eac)
2014-10-13 16:24:00 -07:00
Jian He 31a4bf7321 Missing Changes.txt for YARN-2308
(cherry picked from commit 178bc505da)
2014-10-13 14:20:18 -07:00
Jian He 536254f5e7 YARN-2308. Changed CapacityScheduler to explicitly throw exception if the queue
to which the apps were submitted is changed across RM restart. Contributed by Craig Welch & Chang Li
(cherry picked from commit f9680d9a16)
2014-10-13 14:16:12 -07:00
Jason Lowe 6b5741d423 YARN-2377. Localization exception stack traces are not passed as diagnostic info. Contributed by Gera Shegalov
(cherry picked from commit a56ea01002)
2014-10-13 18:32:38 +00:00
Zhijie Shen e51ae64761 YARN-2651. Spun off LogRollingInterval from LogAggregationContext. Contributed by Xuan Gong.
(cherry picked from commit 4aed2d8e91)
2014-10-13 10:55:09 -07:00
Jason Lowe 9ed9ea8c52 YARN-2667. Fix the release audit warning caused by hadoop-yarn-registry. Contributed by Yi Liu
(cherry picked from commit 344a10ad5e)
2014-10-13 15:40:16 +00:00
Steve Loughran 38dedc2f07 YARN-2668 yarn-registry JAR won't link against ZK 3.4.5. (stevel) 2014-10-11 18:33:29 -07:00
Vinod Kumar Vavilapalli fff6a1f77e YARN-2501. Enhanced AMRMClient library to support requests against node labels. Contributed by Wangda Tan.
(cherry picked from commit a5ec3d0809)
2014-10-10 19:58:42 -07:00
Vinod Kumar Vavilapalli 8ef83a9480 YARN-2494. Added NodeLabels Manager internal API and implementation. Contributed by Wangda Tan.
(cherry picked from commit db7f165319)
2014-10-10 11:45:15 -07:00
Zhijie Shen 1e6d81a886 YARN-2583. Modified AggregatedLogDeletionService to be able to delete rolling aggregated logs. Contributed by Xuan Gong.
(cherry picked from commit cb81bac002)
2014-10-10 00:16:34 -07:00
cnauroth b81641a310 YARN-2662. TestCgroupsLCEResourcesHandler leaks file descriptors. Contributed by Chris Nauroth.
(cherry picked from commit d3afd730ac)
2014-10-09 22:47:04 -07:00
Zhijie Shen 79204dced9 YARN-2671. Fix the Jira number in the change log.
(cherry picked from commit 5b12df6587)
2014-10-09 20:59:37 -07:00
Zhijie Shen ad47a27dbf YARN-2617. Fixed ApplicationSubmissionContext to still set resource for backward compatibility. Contributed by Wangda Tan.
(cherry picked from commit e532ed8faa)
2014-10-09 18:00:01 -07:00
Karthik Kambatla 7e20187f91 YARN-2180. [YARN-1492] In-memory backing store for cache manager. (Chris Trezzo via kasha)
(cherry picked from commit 4f426fe223)
2014-10-09 17:16:45 -07:00
Vinod Kumar Vavilapalli d3125f3de5 YARN-2544. Added admin-API objects for using node-labels. Contributed by Wangda Tan.
(cherry picked from commit 596702a025)
2014-10-09 15:47:20 -07:00
Mayank Bansal c1a86d105e YARN-2598 GHS should show N/A instead of null for the inaccessible information (Zhijie Shen via mayank) 2014-10-09 13:43:36 -07:00
Zhijie Shen 4d170d3db6 YARN-2629. Made the distributed shell use the domain-based timeline ACLs. Contributed by Zhijie Shen.
(cherry picked from commit 1d4612f5ad)
2014-10-09 13:01:44 -07:00
Vinod Kumar Vavilapalli b42cd54d7a YARN-2493. Added user-APIs for using node-labels. Contributed by Wangda Tan.
(cherry picked from commit 180afa2f86)
2014-10-09 11:27:17 -07:00
Steve Loughran d218ab58fc YARN-913 service registry: YARN-2652 add hadoop-yarn-registry package under hadoop-yarn 2014-10-08 12:55:47 -07:00
Jian He 5e6f86e3aa YARN-2649. Fixed TestAMRMRPCNodeUpdates test failure. Contributed by Ming Ma
(cherry picked from commit e16e25ab1b)
2014-10-08 11:03:00 -07:00
Jian He 9ff7c0c96c YARN-1857. CapacityScheduler headroom doesn't account for other AM's running. Contributed by Chen He and Craig Welch
(cherry picked from commit 30d56fdbb4)
2014-10-07 13:48:03 -07:00
Jian He 5c33e91229 YARN-2644. Fixed CapacityScheduler to return up-to-date headroom when AM allocates. Contributed by Craig Welch
(cherry picked from commit 519e5a7dd2)
2014-10-06 15:51:38 -07:00
Jian He 43358be60b YARN-2615. Changed ClientToAMTokenIdentifier/RM(Timeline)DelegationTokenIdentifier to use protobuf as payload. Contributed by Junping Du
(cherry picked from commit ea26cc0b4a)
2014-10-06 10:48:27 -07:00
Chris Douglas 4ba102bdc3 YARN-1051. Add a system for creating reservations of cluster capacity.
Contributed by Subru Krishnan and Carlo Curino.
(cherry picked from commit c8212bacb1)

Conflicts:
	hadoop-yarn-project/CHANGES.txt
2014-10-06 10:30:53 -07:00
subru fb5e9df7fd YARN-2611. Fixing jenkins findbugs warning and TestRMWebServicesCapacitySched for branch YARN-1051. Contributed by Subru Krishnan and Carlo Curino.
(cherry picked from commit c47464aba4)
(cherry picked from commit a2986234be)
2014-10-06 10:21:07 -07:00
subru ae0f16ccc8 YARN-2576. Making test patch pass in branch. Contributed by Subru Krishnan and Carlo Curino.
(cherry picked from commit 90ac0be86b)
(cherry picked from commit 5e10a13bb4)
2014-10-06 10:21:06 -07:00
subru cbfbdf60d6 YARN-2080. Integrating reservation system with ResourceManager and client-RM protocol. Contributed by Subru Krishnan and Carlo Curino.
(cherry picked from commit 8baeaead85)

Conflicts:
	hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMAppImpl.java
(cherry picked from commit 6261f7cc69)
2014-10-06 10:21:06 -07:00
subru fec639cda1 YARN-1712. Plan follower that synchronizes the current state of reservation subsystem with the scheduler. Contributed by Subru Krishnan and Carlo Curino.
(cherry picked from commit 169085319b)
(cherry picked from commit 3418c56bcf)
2014-10-06 10:21:06 -07:00
carlo curino 6bfdaf06c4 YARN-1711. Policy to enforce instantaneous and over-time quotas on user reservation. Contributed by Carlo Curino and Subru Krishnan.
(cherry picked from commit c4918cb4cb)
(cherry picked from commit b6df0dddcd)
2014-10-06 10:21:05 -07:00
carlo curino 6a3c167175 YARN-1710. Logic to find allocations within a Plan that satisfy user ReservationRequest(s). Contributed by Carlo Curino and Subru Krishnan.
(cherry picked from commit aef7928899)
(cherry picked from commit f66ffcf832)
2014-10-06 10:21:05 -07:00
subru 63250ef9d6 YARN-1709. In-memory data structures used to track resources over time to enable reservations.
(cherry picked from commit 0d8b2cd88b)
(cherry picked from commit cf4b34282a)
2014-10-06 10:21:05 -07:00
subru 3a167056d1 YARN-1708. Public YARN APIs for creating/updating/deleting reservations.
(cherry picked from commit 3f2e3b275b)
(cherry picked from commit c9266df404)
2014-10-06 10:21:05 -07:00
carlo curino b81f571e60 YARN-2475. Logic for responding to capacity drops for the ReservationSystem. Contributed by Carlo Curino and Subru Krishnan.
(cherry picked from commit f83a07f266)
(cherry picked from commit 1c6950354f)
2014-10-06 10:21:05 -07:00
carlo curino cf5ef00b96 YARN-1707. Introduce APIs to add/remove/resize queues in the CapacityScheduler. Contributed by Carlo Curino and Subru Krishnan
(cherry picked from commit aac47fda7f)

Conflicts:
	hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacityScheduler.java
(cherry picked from commit eb3e40b833)
2014-10-06 10:21:04 -07:00
Vinod Kumar Vavilapalli 7ed61e150c YARN-2468. Enhanced NodeManager to support log handling APIs (YARN-2569) for use by long running services. Contributed by Xuan Gong.
(cherry picked from commit 34cdcaad71)
2014-10-03 12:17:03 -07:00
Karthik Kambatla b6ce0a1f69 YARN-2635. TestRM, TestRMRestart, TestClientToAMTokens should run with both CS and FS. (Wei Yan and kasha via kasha)
(cherry picked from commit 80d11eb68e)
2014-10-03 11:52:05 -07:00
Jian He 1c58ab9206 YARN-2562. Changed ContainerId#toString() to be more readable. Contributed by Tsuyoshi OZAWA
(cherry picked from commit eb6ce5e97c)
2014-10-03 11:04:46 -07:00
Jian He 6f4c77409b YARN-2628. Capacity scheduler with DominantResourceCalculator carries out reservation even though slots are free. Contributed by Varun Vasudev
(cherry picked from commit 054f285526)
2014-10-02 15:16:07 -07:00
Zhijie Shen ecaae67ab3 YARN-2527. Fixed the potential NPE in ApplicationACLsManager and added test cases for it. Contributed by Benoy Antony.
(cherry picked from commit 1c93025a1b)
2014-10-02 14:57:27 -07:00
Jason Lowe 531c1fd00a YARN-2624. Resource Localization fails on a cluster due to existing cache directories. Contributed by Anubhav Dhoot
(cherry picked from commit 29f520052e)
2014-10-02 17:40:44 +00:00
Karthik Kambatla b6f4d1ef42 YARN-2254. TestRMWebServicesAppsModification should run against both CS and FS. (Zhihai Xu via kasha)
(cherry picked from commit 5e0b49da9c)
2014-10-02 10:15:41 -07:00
Jian He 61c7ceaf82 YARN-2617. Fixed NM to not send duplicate container status whose app is not running. Contributed by Jun Gong
(cherry picked from commit 3ef1cf187f)
2014-10-02 10:04:42 -07:00
junping_du 6483342a61 YARN-1979. TestDirectoryCollection fails when the umask is unusual. (Contributed by Vinod Kumar Vavilapalli and Tsuyoshi OZAWA)
(cherry picked from commit c7cee9b455)
2014-10-02 08:04:25 -07:00
Vinod Kumar Vavilapalli 34dd2d1d1c YARN-2446. Augmented Timeline service APIs to start taking in domains as a parameter while posting entities and events. Contributed by Zhijie Shen.
(cherry picked from commit 9e40de6af7)

Conflicts:
	hadoop-yarn-project/CHANGES.txt
2014-10-01 17:54:12 -07:00
Vinod Kumar Vavilapalli 3326fba382 YARN-1972. Added a secure container-executor for Windows. Contributed by Remus Rusanu.
commit ba7f31c2ee is the corresponding trunk commit, this is a slightly different patch for branch-2.
2014-10-01 17:07:21 -07:00
junping_du 625456746c YARN-2613. Support retry in NMClient for rolling-upgrades. (Contributed by Jian He) 2014-10-01 17:08:55 -07:00
Zhijie Shen 4b50e23271 YARN-2630. Prevented previous AM container status from being acquired by the current restarted AM. Contributed by Jian He.
(cherry picked from commit 52bbe0f11b)
2014-10-01 15:39:36 -07:00
Vinod Kumar Vavilapalli 64bed0460e YARN-1063. Augmented Hadoop common winutils to have the ability to create containers as domain users. Contributed by Remus Rusanu.
Committed as a YARN patch even though all the code changes are in common.

(cherry picked from commit 5ca97f1e60)
2014-10-01 09:55:57 -07:00
Karthik Kambatla 3664659592 YARN-2179. Fix version in sharedcachemanager-pom. 2014-10-01 07:34:24 -07:00
Karthik Kambatla b616c69835 YARN-2179. [YARN-1492] Initial cache manager structure and context. (Chris Trezzo via kasha)
(cherry picked from commit 17d1202c35)

Conflicts:
	hadoop-yarn-project/hadoop-yarn/bin/yarn
2014-09-30 19:05:10 -07:00
Jian He 823f02725f YARN-2602. Fixed possible NPE in ApplicationHistoryManagerOnTimelineStore. Contributed by Zhijie Shen
(cherry picked from commit bbff96be48)
2014-09-30 16:44:44 -07:00
Karthik Kambatla 5a43b795b7 YARN-2594. Potential deadlock in RM when querying ApplicationResourceUsageReport. (Wangda Tan via kasha)
(cherry picked from commit 14d60dadc2)
2014-09-30 16:17:38 -07:00
Jason Lowe a0305ba3fc YARN-2387. Resource Manager crashes with NPE due to lack of synchronization. Contributed by Mit Desai
(cherry picked from commit feaf139b4f)
2014-09-30 22:38:27 +00:00
Zhijie Shen d977205b9b YARN-2627. Added the info logs of attemptFailuresValidityInterval and number of previous failed attempts. Contributed by Xuan Gong.
(cherry picked from commit 9582a50176)
2014-09-30 12:59:34 -07:00
Karthik Kambatla 21f920ab86 YARN-2610. Hamlet should close table tags. (Ray Chiang via kasha)
(cherry picked from commit f7743dd07d)
2014-09-30 11:47:01 -07:00
Arun C. Murthy 6a60fa279a Preparing to branch hadoop-2.6 2014-09-30 10:37:03 -07:00
Jonathan Eagles 9bc676aa6e YARN-2606. Application History Server tries to access hdfs before doing secure login (Mit Desai via jeagles) 2014-09-29 16:40:46 -05:00
Jason Lowe 4f6a367166 YARN-1769. CapacityScheduler: Improve reservations. Contributed by Thomas Graves
(cherry picked from commit 9c22065109)
2014-09-29 14:13:21 +00:00
Jian He cb08ed1484 YARN-668. Changed NMTokenIdentifier/AMRMTokenIdentifier/ContainerTokenIdentifier to use protobuf object as the payload. Contributed by Junping Du.
(cherry picked from commit 5391919b09)
2014-09-26 17:53:35 -07:00
Allen Wittenauer 6f5d555ad0 YARN-2372. There are Chinese Characters in the FairScheduler's document (Fengdong Yu via aw) 2014-09-26 12:47:26 -07:00
Allen Wittenauer f694b44036 YARN-2577. Clarify ACL delimiter and how to configure ACL groups only (Mikos Christine via aw) 2014-09-26 11:06:04 -07:00
Karthik Kambatla b923c291b4 YARN-2608. FairScheduler: Potential deadlocks in loading alloc files and clock access. (Wei Yan via kasha)
(cherry picked from commit c9811af09a3d3f9f2f1b86fc9d6f2763d3225e44)
2014-09-25 17:43:08 -07:00
Jason Lowe e4d46e5ff6 YARN-2523. ResourceManager UI showing negative value for "Decommissioned Nodes" field. Contributed by Rohith
(cherry picked from commit 8269bfa613)
2014-09-25 22:39:57 +00:00
Zhijie Shen 83926b3c57 YARN-2546. Made REST API for application creation/submission use numeric and boolean types instead of the string of them. Contributed by Varun Vasudev.
(cherry picked from commit 72b0881ca6)
2014-09-24 17:58:48 -07:00
Zhijie Shen 3a2e400377 YARN-2581. Passed LogAggregationContext to NM via ContainerTokenIdentifier. Contributed by Xuan Gong.
(cherry picked from commit c86674a3a4)
2014-09-24 17:51:54 -07:00
Karthik Kambatla 30165d4cdd YARN-2596. TestWorkPreservingRMRestart fails with FairScheduler. (kasha)
(cherry picked from commit 39c87344e1)
2014-09-24 15:24:17 -07:00
Vinod Kumar Vavilapalli 5d251d99d6 YARN-2102. Added the concept of a Timeline Domain to handle read/write ACLs on Timeline service event data. Contributed by Zhijie Shen.
(cherry picked from commit d78b452a4f)
2014-09-24 11:29:01 -07:00
Allen Wittenauer e5a531a8a7 YARN-2161. Fix build on macosx: YARN parts (Binglin Chang via aw) 2014-09-24 08:48:42 -07:00
Zhijie Shen 19cfe2f800 YARN-2569. Added the log handling APIs for the long running services. Contributed by Xuan Gong.
(cherry picked from commit 5338ac416a)
2014-09-23 10:38:27 -07:00
Karthik Kambatla 024bcfdc0d YARN-2252. Intermittent failure of TestFairScheduler.testContinuousScheduling. (Ratandeep Ratti and kasha via kasha)
(cherry picked from commit f5578207d2)
2014-09-23 00:03:47 -07:00
Karthik Kambatla 8ba8521de5 YARN-1959. Fix headroom calculation in FairScheduler. (Anubhav Dhoot via kasha)
(cherry picked from commit 568d3dc2bb)
2014-09-22 23:51:45 -07:00
junping_du 34ee084c3d YARN-2584. TestContainerManagerSecurity fails on trunk. (Contributed by Jian He)
(cherry picked from commit a9a55db065)
2014-09-22 22:47:59 -07:00
Karthik Kambatla 3984435661 YARN-2539. FairScheduler: Set the default value for maxAMShare to 0.5. (Wei Yan via kasha)
(cherry picked from commit 43efdd30b5)
2014-09-22 16:10:20 -07:00
Karthik Kambatla 24a814771e YARN-2540. FairScheduler: Queue filters not working on scheduler page in RM UI. (Ashwin Shankar via kasha)
(cherry picked from commit 23e17ce0ff)
2014-09-22 15:42:36 -07:00
Zhijie Shen b8d645539d MAPREDUCE-5279. Made MR headroom calculation honor cpu dimension when YARN scheduler resource type is memory plus cpu. Contributed by Peng Zhang and Varun Vasudev. 2014-09-22 10:41:55 -07:00
Jian He 3ce97a9efd YARN-1372. Ensure all completed containers are reported to the AMs across RM restart. Contributed by Anubhav Dhoot
(cherry picked from commit 0a641496c7)
2014-09-22 10:32:44 -07:00
Karthik Kambatla c1a3819a4d YARN-2453. TestProportionalCapacityPreemptionPolicy fails with FairScheduler. (Zhihai Xu via kasha)
(cherry picked from commit 9721e2c1fe)
2014-09-21 23:14:27 -07:00
Karthik Kambatla 1714af0618 YARN-2452. TestRMApplicationHistoryWriter fails with FairScheduler. (Zhihai Xu via kasha)
(cherry picked from commit c50fc92502)
2014-09-21 13:15:45 -07:00
Allen Wittenauer 0037b8f67b YARN-2460. Remove obsolete entries from yarn-default.xml (Ray Chiang via aw) 2014-09-19 14:08:04 -07:00
Jian He 07981c8f60 YARN-2565. Fixed RM to not use FileSystemApplicationHistoryStore unless explicitly set. Contributed by Zhijie Shen
(cherry picked from commit 444acf8ea7)
2014-09-19 11:28:22 -07:00
Zhijie Shen 9333ee3068 YARN-2568. Fixed the potential test failures due to race conditions when RM work-preserving recovery is enabled. Contributed by Jian He.
(cherry picked from commit 6fe5c6b746)
2014-09-18 22:02:53 -07:00
Jian He 4cabeef931 YARN-2563. Fixed YarnClient to call getTimeLineDelegationToken only if the Token is not present. Contributed by Zhijie Shen
(cherry picked from commit eb92cc67df)
2014-09-18 14:41:14 -07:00
Jason Lowe d9273a9547 YARN-2561. MR job client cannot reconnect to AM after NM restart. Contributed by Junping Du
(cherry picked from commit a337f0e354)
2014-09-18 21:36:20 +00:00
Jason Lowe 44c22c3d8d YARN-2363. Submitted applications occasionally lack a tracking URL. Contributed by Jason Lowe
(cherry picked from commit 9ea7b6c063)
2014-09-18 20:15:46 +00:00
Vinod Kumar Vavilapalli d24ef142b7 YARN-2001. Added a time threshold for RM to wait before starting container allocations after restart/failover. Contributed by Jian He.
(cherry picked from commit 485c96e3cb)
2014-09-18 11:04:27 -07:00
Vinod Kumar Vavilapalli 514bfeafd9 YARN-1779. Fixed AMRMClient to handle AMRMTokens correctly across ResourceManager work-preserving-restart or failover. Contributed by Jian He.
(cherry picked from commit a3d9934f91)
2014-09-18 10:17:24 -07:00
Jian He d61cdd66db YARN-2559. Fixed NPE in SystemMetricsPublisher when retrieving FinalApplicationStatus. Contributed by Zhijie Shen
(cherry picked from commit ee21b13cbd)
2014-09-17 21:44:49 -07:00
Jian He 3746b1e905 YARN-2558. Updated ContainerTokenIdentifier#read/write to use ContainerId#getContainerId. Contributed by Tsuyoshi OZAWA.
(cherry picked from commit f4886111aa)

Conflicts:
	hadoop-yarn-project/CHANGES.txt
2014-09-17 15:22:02 -07:00
junping_du c6b9768b36 YARN-1250. Addendum
(cherry picked from commit 0e7d1dbf9a)
2014-09-16 18:30:31 -07:00
junping_du 1e1f4c2fdf YARN-1250. Generic history service should support application-acls. (Contributed by Zhijie Shen)
(cherry picked from commit 90a0c03f0a)
2014-09-16 18:30:06 -07:00
XuanGong 03fdbd7899 YARN-2557. Add a parameter "attempt_Failures_Validity_Interval" into
DistributedShell. Contributed by Xuan Gong
2014-09-16 11:01:26 -07:00
Vinod Kumar Vavilapalli 9d34dc87e1 YARN-2531. Added a configuration for admins to be able to override app-configs and enforce/not-enforce strict control of per-container cpu usage. Contributed by Varun Vasudev.
(cherry picked from commit 9f6891d9ef)
2014-09-16 10:15:37 -07:00
Jian He 1c3f837835 YARN-2529. Generic history service RPC interface doesn't work when service authorization is enabled. Contributed by Zhijie Shen
(cherry picked from commit 88e329fdfb)
2014-09-15 13:15:07 -07:00
cnauroth aaef460e7a YARN-2549. TestContainerLaunch fails due to classpath problem with hamcrest classes. Contributed by Chris Nauroth.
(cherry picked from commit 9d4ec97c95)
2014-09-15 11:54:41 -07:00