Yan Xu created MESOS-6222:
-----------------------------

             Summary: Improve organization of methods related to Resources
                 Key: MESOS-6222
                 URL: https://issues.apache.org/jira/browse/MESOS-6222
             Project: Mesos
          Issue Type: Improvement
          Components: c++ api
            Reporter: Yan Xu


Currently the {{Resources}} class is used to dump everything loosely related to 
the protobuf {{Resource}} as member methods.

As a result {{Resources}} has a large amount of utility methods that are not 
related to the {{Resources}} abstraction.

Examples:
{code:title=This returns a protobuf Resource and not Resources.}
static Try<Resource> parse(
      const std::string& name,
      const std::string& value,
      const std::string& role);
{code}

{code:title=This only looks at the protobuf too.}
static bool isPersistentVolume(const Resource& resource);
{code}

This makes it hard to name and distinguish similar methods which work at 
different abstraction levels (see the {{parse(text, role)}} function below).

It would be way simpler to have them as namespaced free-standing functions.

{code:title=}
namespace mesos {

// Methods for the protobuf `Resource`.
namespace resource {
  Try<Resource> parse(
      const std::string& name,
      const std::string& value,
      const std::string& role);

  bool isPersistentVolume(const Resource& resource);

  // Now I can add a `parse` method for multiple resources but at the 
`Resource` level.
  Try<vector<Resource>> parse(
      const std::string& text,
      const std::string& defaultRole = "*");
}

// Methods for the `Resources` abstraction.
namespace resources {
   ...
}
}
{code}

Static member methods of Resources are still fine if they directly pertain to 
the {{Resources}} abstraction itself and we can use the private members/methods 
when useful.

{code:title=e.g., Resources::flatten() uses the internal validation-free `add` 
method as opposed to `+=` to accumulate resource objects}
Try<Resources> flatten(
      const std::string& role,
      const Option<Resource::ReservationInfo>& reservation = None()) const;
{code}





--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to