Tom Beerbower created AMBARI-1399:
-------------------------------------
Summary: SPI and API Tasks related to cleanup and simplifying API
development.
Key: AMBARI-1399
URL: https://issues.apache.org/jira/browse/AMBARI-1399
Project: Ambari
Issue Type: Task
Reporter: Tom Beerbower
Assignee: Tom Beerbower
Fix For: 1.3.0
SPI and API Tasks related to cleanup and simplifying API development. Broad
bucket but will add more items and supporting documents.
# *Refactor to remove AmbariManagementController*
We should be able to pull all of the AmbariManagementControllerImpl code into
the specific resource provider implementations. This would allow us to get rid
of the AmbariManagementController interface which has grown to become a
maintenance issue. It will also allow us to factor out a lot of code that is
in place to deal with the fact that the controller doesn't handle predicates
directly. Adding futrue functionaly becomes easier since resource provider
deals directly with predicates.
# *Refactor resource providers to remove special cases for configuration*
The configuration resource provider changed the SPI model somewhat in that it
isn't able to provide a set of supported properties. Instead it provides a set
of arbitrary properties under a known category (i.e. "properties").
Specialized code was added to allow for this in the configuration resource
provider as well as the service and component resource providers. The SPI has
since been cleaned up to the point where it should be possible to remove this
specialized code and handle it with a generic mechanism.
# *Remove SPI dependencies on other code (i.e.
org.apache.ambari.server.api.util.TreeNode in
org.apache.ambari.server.controller.spi.Resource)*
Third parties writing resource providers shouldn't have to depend on anything
outside of the SPI package.
# *Clean up Predicate code around BasePredicate to remove need for casting*
Some specialized predicate behavior is exposed through the BasePredicate object
instead of the Predicate interface which causes a requirement to cast from a
Predicate to a BasePredicate in some cases. The Predicate hierarchy should be
cleaned up to remove this requirement if possible or make it cleaner if not.
# *Clean up PredicateBuilder to make it more usable (i.e remove need for
casting to internal types while maintaining compile time checks for
correctness)*
The predicate builder feature makes use of specialized internal builder classes
to enforce correct builder syntax at compile time. In some cases, this makes
the builder more difficult to use since these internal classes are not really
intended to be exposed to the end user.
# *Add additional predicate objects to support more complex queries through the
API (e.g. containsKey(), containsValue())*
We should review what types of queries that users are likely to make and add
predicate objects to support them. An example would be the
CategoryIsEmptyPredicate that was added to support an API partial result
request of ?ServiceInfo/desired_configs.isEmpty()
# *Add SPI support for specifying order of resources and metrics in results*
Currently a get through a resource provider returns a set of resources, each
containing a map of properties/metrics. There is no way currently to specify
order.
# *Normalize all category/property/metric names available through the API*
There is no standard for the property names available through the API. For the
most part, the public name of a metric is the same as the internal name from
the back end (Ganglia, JMX, Ambari DB). This includes a mix of upper case,
lower case, camel case, underscore, dashes, etc... We should define a standard
for the public facing names that we expose through the API. We need to come up
with a mechanism that exposes the new public names but also makes the existing
names available for some time (unless we simply cut over to the new names for
the next API version).
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira