Apache Mesos
mesos.hpp
Go to the documentation of this file.
1 // Licensed to the Apache Software Foundation (ASF) under one
2 // or more contributor license agreements. See the NOTICE file
3 // distributed with this work for additional information
4 // regarding copyright ownership. The ASF licenses this file
5 // to you under the Apache License, Version 2.0 (the
6 // "License"); you may not use this file except in compliance
7 // with the License. You may obtain a copy of the License at
8 //
9 // http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 
17 #ifndef __MESOS_V1_HPP__
18 #define __MESOS_V1_HPP__
19 
20 #include <iosfwd>
21 #include <string>
22 #include <vector>
23 
24 #include <boost/functional/hash.hpp>
25 
26 #include <mesos/v1/mesos.pb.h> // ONLY USEFUL AFTER RUNNING PROTOC.
27 
28 #include <stout/option.hpp>
29 #include <stout/strings.hpp>
30 
31 // This file includes definitions for operators on public protobuf
32 // classes (defined in mesos.proto, module.proto, etc.) that don't
33 // have these operators generated by the protobuf compiler. The
34 // corresponding definitions are in src/v1/mesos.cpp.
35 //
36 // Mesos modules need some of the protobuf classes defined in
37 // mesos.proto, module.proto, etc., and require some of these
38 // operators declared in mesos.hpp. Exposing mesos.hpp
39 // allows us to build modules without having a dependency on mesos
40 // source tree (src/*).
41 
42 namespace mesos {
43 namespace v1 {
44 
45 bool operator==(const CommandInfo& left, const CommandInfo& right);
46 bool operator==(const CommandInfo::URI& left, const CommandInfo::URI& right);
47 bool operator==(const ContainerInfo& left, const ContainerInfo& right);
48 bool operator==(const Credential& left, const Credential& right);
49 bool operator==(const CSIPluginInfo& left, const CSIPluginInfo& right);
50 
51 bool operator==(
52  const CSIPluginContainerInfo& left,
53  const CSIPluginContainerInfo& right);
54 
55 bool operator==(const DiscoveryInfo& left, const DiscoveryInfo& right);
56 bool operator==(const DrainInfo& left, const DrainInfo& right);
57 bool operator==(const Environment& left, const Environment& right);
58 bool operator==(const ExecutorInfo& left, const ExecutorInfo& right);
59 bool operator==(const FileInfo& left, const FileInfo& right);
60 bool operator==(const Label& left, const Label& right);
61 bool operator==(const Labels& left, const Labels& right);
62 bool operator==(const MasterInfo& left, const MasterInfo& right);
63 bool operator==(const Offer::Operation& left, const Offer::Operation& right);
64 bool operator==(const Operation& left, const Operation& right);
65 
66 bool operator==(
67  const ResourceProviderInfo& left,
68  const ResourceProviderInfo& right);
69 
70 bool operator==(
71  const ResourceStatistics& left,
72  const ResourceStatistics& right);
73 
74 bool operator==(const AgentInfo& left, const AgentInfo& right);
75 bool operator==(const TaskStatus& left, const TaskStatus& right);
76 bool operator==(const URL& left, const URL& right);
77 bool operator==(const Volume& left, const Volume& right);
78 
79 bool operator!=(const Labels& left, const Labels& right);
80 bool operator!=(const Offer::Operation& left, const Offer::Operation& right);
81 bool operator!=(const Operation& left, const Operation& right);
82 bool operator!=(const TaskStatus& left, const TaskStatus& right);
83 
84 
85 inline bool operator==(const ContainerID& left, const ContainerID& right)
86 {
87  return left.value() == right.value();
88 }
89 
90 
91 inline bool operator==(const ExecutorID& left, const ExecutorID& right)
92 {
93  return left.value() == right.value();
94 }
95 
96 
97 inline bool operator==(const FrameworkID& left, const FrameworkID& right)
98 {
99  return left.value() == right.value();
100 }
101 
102 
103 // This operator, which was comparing only `user` and `name` fields,
104 // has been deleted in favor of `typeutils::equivalent()` function (see below)
105 // with different semantics.
106 bool operator==(const FrameworkInfo& left, const FrameworkInfo& right) = delete;
107 
108 
109 namespace typeutils {
110 
111 // Returns whether two `FrameworkInfo`s are equivalent for framework
112 // subscription purposes or not (i.e. whether subscribing a framework with the
113 // `left` should have the same effects as with the `right`).
114 bool equivalent(const FrameworkInfo& left, const FrameworkInfo& right);
115 
116 // Performs the same comparison as `equivalent()` and returns a human-readable
117 // diff if the `FrameworkInfo`s are not equivalnt.
118 Option<std::string> diff(const FrameworkInfo& left, const FrameworkInfo& right);
119 
120 } // namespace typeutils {
121 
122 
123 inline bool operator==(const OfferID& left, const OfferID& right)
124 {
125  return left.value() == right.value();
126 }
127 
128 
129 inline bool operator==(const OperationID& left, const OperationID& right)
130 {
131  return left.value() == right.value();
132 }
133 
134 
135 inline bool operator==(
136  const ResourceProviderID& left,
137  const ResourceProviderID& right)
138 {
139  return left.value() == right.value();
140 }
141 
142 
143 inline bool operator==(const UUID& left, const UUID& right)
144 {
145  return left.value() == right.value();
146 }
147 
148 
149 inline bool operator==(const AgentID& left, const AgentID& right)
150 {
151  return left.value() == right.value();
152 }
153 
154 
155 inline bool operator==(const TaskID& left, const TaskID& right)
156 {
157  return left.value() == right.value();
158 }
159 
160 
161 inline bool operator==(const TimeInfo& left, const TimeInfo& right)
162 {
163  return left.nanoseconds() == right.nanoseconds();
164 }
165 
166 
167 inline bool operator==(const DurationInfo& left, const DurationInfo& right)
168 {
169  return left.nanoseconds() == right.nanoseconds();
170 }
171 
172 
173 inline bool operator==(const ContainerID& left, const std::string& right)
174 {
175  return left.value() == right;
176 }
177 
178 
179 inline bool operator==(const ExecutorID& left, const std::string& right)
180 {
181  return left.value() == right;
182 }
183 
184 
185 inline bool operator==(const FrameworkID& left, const std::string& right)
186 {
187  return left.value() == right;
188 }
189 
190 
191 inline bool operator==(const OfferID& left, const std::string& right)
192 {
193  return left.value() == right;
194 }
195 
196 
197 inline bool operator==(const AgentID& left, const std::string& right)
198 {
199  return left.value() == right;
200 }
201 
202 
203 inline bool operator==(const TaskID& left, const std::string& right)
204 {
205  return left.value() == right;
206 }
207 
208 
209 inline bool operator==(
210  const DomainInfo::FaultDomain::RegionInfo& left,
211  const DomainInfo::FaultDomain::RegionInfo& right)
212 {
213  return left.name() == right.name();
214 }
215 
216 
217 inline bool operator==(
218  const DomainInfo::FaultDomain::ZoneInfo& left,
219  const DomainInfo::FaultDomain::ZoneInfo& right)
220 {
221  return left.name() == right.name();
222 }
223 
224 
225 inline bool operator==(
226  const DomainInfo::FaultDomain& left,
227  const DomainInfo::FaultDomain& right)
228 {
229  return left.region() == right.region() && left.zone() == right.zone();
230 }
231 
232 
233 inline bool operator==(const DomainInfo& left, const DomainInfo& right)
234 {
235  return left.fault_domain() == right.fault_domain();
236 }
237 
238 
243 inline bool operator==(const MachineID& left, const MachineID& right)
244 {
245  // NOTE: Both fields default to the empty string if they are not specified,
246  // so the string comparisons are safe.
247  return left.has_hostname() == right.has_hostname() &&
248  strings::lower(left.hostname()) == strings::lower(right.hostname()) &&
249  left.has_ip() == right.has_ip() &&
250  left.ip() == right.ip();
251 }
252 
253 
254 inline bool operator!=(const ContainerID& left, const ContainerID& right)
255 {
256  return left.value() != right.value();
257 }
258 
259 
260 inline bool operator!=(
261  const CSIPluginContainerInfo& left,
262  const CSIPluginContainerInfo& right)
263 {
264  return !(left == right);
265 }
266 
267 
268 inline bool operator!=(const ExecutorID& left, const ExecutorID& right)
269 {
270  return left.value() != right.value();
271 }
272 
273 
274 inline bool operator!=(const FrameworkID& left, const FrameworkID& right)
275 {
276  return left.value() != right.value();
277 }
278 
279 
280 inline bool operator!=(const OperationID& left, const OperationID& right)
281 {
282  return left.value() != right.value();
283 }
284 
285 
286 inline bool operator!=(
287  const ResourceProviderID& left,
288  const ResourceProviderID& right)
289 {
290  return left.value() != right.value();
291 }
292 
293 
294 inline bool operator!=(
295  const ResourceProviderInfo& left,
296  const ResourceProviderInfo& right)
297 {
298  return !(left == right);
299 }
300 
301 
302 inline bool operator!=(const UUID& left, const UUID& right)
303 {
304  return !(left == right);
305 }
306 
307 
308 inline bool operator!=(const AgentID& left, const AgentID& right)
309 {
310  return left.value() != right.value();
311 }
312 
313 
314 inline bool operator!=(const TimeInfo& left, const TimeInfo& right)
315 {
316  return !(left == right);
317 }
318 
319 
320 inline bool operator!=(const DurationInfo& left, const DurationInfo& right)
321 {
322  return !(left == right);
323 }
324 
325 
326 inline bool operator!=(
327  const DomainInfo::FaultDomain::RegionInfo& left,
328  const DomainInfo::FaultDomain::RegionInfo& right)
329 {
330  return left.name() != right.name();
331 }
332 
333 
334 inline bool operator<(const ContainerID& left, const ContainerID& right)
335 {
336  return left.value() < right.value();
337 }
338 
339 
340 inline bool operator<(const ExecutorID& left, const ExecutorID& right)
341 {
342  return left.value() < right.value();
343 }
344 
345 
346 inline bool operator<(const FrameworkID& left, const FrameworkID& right)
347 {
348  return left.value() < right.value();
349 }
350 
351 
352 inline bool operator<(const OfferID& left, const OfferID& right)
353 {
354  return left.value() < right.value();
355 }
356 
357 
358 inline bool operator<(const AgentID& left, const AgentID& right)
359 {
360  return left.value() < right.value();
361 }
362 
363 
364 inline bool operator<(const TaskID& left, const TaskID& right)
365 {
366  return left.value() < right.value();
367 }
368 
369 
370 std::ostream& operator<<(
371  std::ostream& stream,
372  const CapabilityInfo& capabilityInfo);
373 
374 
375 std::ostream& operator<<(
376  std::ostream& stream,
377  const CheckStatusInfo& checkStatusInfo);
378 
379 
380 std::ostream& operator<<(std::ostream& stream, const ContainerID& containerId);
381 
382 
383 std::ostream& operator<<(
384  std::ostream& stream,
385  const ContainerInfo& containerInfo);
386 
387 
388 std::ostream& operator<<(std::ostream& stream, const DomainInfo& domainInfo);
389 
390 
391 std::ostream& operator<<(std::ostream& stream, const ExecutorID& executorId);
392 
393 
394 std::ostream& operator<<(std::ostream& stream, const ExecutorInfo& executor);
395 
396 
397 std::ostream& operator<<(std::ostream& stream, const FrameworkID& frameworkId);
398 
399 
400 std::ostream& operator<<(std::ostream& stream, const MasterInfo& master);
401 
402 
403 std::ostream& operator<<(std::ostream& stream, const OfferID& offerId);
404 
405 
406 std::ostream& operator<<(std::ostream& stream, const OperationID& operationId);
407 
408 
409 std::ostream& operator<<(std::ostream& stream, const OperationState& state);
410 
411 
412 std::ostream& operator<<(std::ostream& stream, const RateLimits& limits);
413 
414 
415 std::ostream& operator<<(std::ostream& stream, const RLimitInfo& limits);
416 
417 
418 std::ostream& operator<<(
419  std::ostream& stream,
420  const ResourceProviderID& resourceProviderId);
421 
422 
423 std::ostream& operator<<(
424  std::ostream& stream,
425  const ResourceProviderInfo& resourceProviderInfo);
426 
427 
428 std::ostream& operator<<(std::ostream& stream, const TaskStatus& status);
429 
430 
431 std::ostream& operator<<(std::ostream& stream, const OperationStatus& status);
432 
433 
434 std::ostream& operator<<(std::ostream& stream, const AgentID& agentId);
435 
436 
437 std::ostream& operator<<(std::ostream& stream, const AgentInfo& agent);
438 
439 
440 std::ostream& operator<<(std::ostream& stream, const TaskID& taskId);
441 
442 
443 std::ostream& operator<<(std::ostream& stream, const MachineID& machineId);
444 
445 
446 std::ostream& operator<<(std::ostream& stream, const TaskInfo& task);
447 
448 
449 std::ostream& operator<<(
450  std::ostream& stream,
451  const TaskGroupInfo& taskGroupInfo);
452 
453 
454 std::ostream& operator<<(std::ostream& stream, const TaskState& state);
455 
456 
457 std::ostream& operator<<(std::ostream& stream, const CheckInfo::Type& type);
458 
459 
460 std::ostream& operator<<(
461  std::ostream& stream,
462  const CSIPluginContainerInfo::Service& service);
463 
464 
465 std::ostream& operator<<(
466  std::ostream& stream,
467  const FrameworkInfo::Capability& capability);
468 
469 
470 std::ostream& operator<<(std::ostream& stream, const Image::Type& imageType);
471 
472 
473 std::ostream& operator<<(std::ostream& stream, const Secret::Type& secretType);
474 
475 
476 std::ostream& operator<<(
477  std::ostream& stream,
478  const Offer::Operation::Type& operationType);
479 
480 
481 std::ostream& operator<<(
482  std::ostream& stream,
483  const Resource::DiskInfo::Source::Type& sourceType);
484 
485 
486 template <typename T>
487 inline std::ostream& operator<<(
488  std::ostream& stream,
489  const std::vector<T>& messages)
490 {
491  stream << "[ ";
492  for (auto it = messages.begin(); it != messages.end(); ++it) {
493  if (it != messages.begin()) {
494  stream << ", ";
495  }
496  stream << *it;
497  }
498  stream << " ]";
499  return stream;
500 }
501 
502 } // namespace v1 {
503 } // namespace mesos {
504 
505 
506 namespace std {
507 
508 template <>
509 struct hash<mesos::v1::CommandInfo::URI>
510 {
511  typedef size_t result_type;
512 
513  typedef mesos::v1::CommandInfo::URI argument_type;
514 
515  result_type operator()(const argument_type& uri) const
516  {
517  size_t seed = 0;
518 
519  if (uri.extract()) {
520  seed += 11;
521  }
522 
523  if (uri.executable()) {
524  seed += 2003;
525  }
526 
527  boost::hash_combine(seed, uri.value());
528  boost::hash_combine(seed, uri.output_file());
529  return seed;
530  }
531 };
532 
533 
534 template <>
535 struct hash<mesos::v1::ContainerID>
536 {
537  typedef size_t result_type;
538 
539  typedef mesos::v1::ContainerID argument_type;
540 
541  result_type operator()(const argument_type& containerId) const
542  {
543  size_t seed = 0;
544  boost::hash_combine(seed, containerId.value());
545  return seed;
546  }
547 };
548 
549 
550 template <>
551 struct hash<mesos::v1::ExecutorID>
552 {
553  typedef size_t result_type;
554 
555  typedef mesos::v1::ExecutorID argument_type;
556 
557  result_type operator()(const argument_type& executorId) const
558  {
559  size_t seed = 0;
560  boost::hash_combine(seed, executorId.value());
561  return seed;
562  }
563 };
564 
565 
566 template <>
567 struct hash<mesos::v1::FrameworkID>
568 {
569  typedef size_t result_type;
570 
571  typedef mesos::v1::FrameworkID argument_type;
572 
573  result_type operator()(const argument_type& frameworkId) const
574  {
575  size_t seed = 0;
576  boost::hash_combine(seed, frameworkId.value());
577  return seed;
578  }
579 };
580 
581 
582 template <>
583 struct hash<mesos::v1::OfferID>
584 {
585  typedef size_t result_type;
586 
587  typedef mesos::v1::OfferID argument_type;
588 
589  result_type operator()(const argument_type& offerId) const
590  {
591  size_t seed = 0;
592  boost::hash_combine(seed, offerId.value());
593  return seed;
594  }
595 };
596 
597 
598 template <>
599 struct hash<mesos::v1::AgentID>
600 {
601  typedef size_t result_type;
602 
603  typedef mesos::v1::AgentID argument_type;
604 
605  result_type operator()(const argument_type& agentId) const
606  {
607  size_t seed = 0;
608  boost::hash_combine(seed, agentId.value());
609  return seed;
610  }
611 };
612 
613 
614 template <>
615 struct hash<mesos::v1::TaskID>
616 {
617  typedef size_t result_type;
618 
619  typedef mesos::v1::TaskID argument_type;
620 
621  result_type operator()(const argument_type& taskId) const
622  {
623  size_t seed = 0;
624  boost::hash_combine(seed, taskId.value());
625  return seed;
626  }
627 };
628 
629 
630 template <>
631 struct hash<mesos::v1::TaskState>
632 {
633  typedef size_t result_type;
634 
635  typedef mesos::v1::TaskState argument_type;
636 
637  result_type operator()(const argument_type& taskState) const
638  {
639  // Use the underlying type of the enum as hash value.
640  return static_cast<size_t>(taskState);
641  }
642 };
643 
644 
645 template <>
646 struct hash<mesos::v1::TaskStatus_Source>
647 {
648  typedef size_t result_type;
649 
650  typedef mesos::v1::TaskStatus_Source argument_type;
651 
652  result_type operator()(const argument_type& source) const
653  {
654  // Use the underlying type of the enum as hash value.
655  return static_cast<size_t>(source);
656  }
657 };
658 
659 
660 template <>
661 struct hash<mesos::v1::TaskStatus_Reason>
662 {
663  typedef size_t result_type;
664 
665  typedef mesos::v1::TaskStatus_Reason argument_type;
666 
667  result_type operator()(const argument_type& reason) const
668  {
669  // Use the underlying type of the enum as hash value.
670  return static_cast<size_t>(reason);
671  }
672 };
673 
674 
675 template <>
676 struct hash<mesos::v1::Image::Type>
677 {
678  typedef size_t result_type;
679 
681 
682  result_type operator()(const argument_type& imageType) const
683  {
684  // Use the underlying type of the enum as hash value.
685  return static_cast<size_t>(imageType);
686  }
687 };
688 
689 
690 template <>
691 struct hash<std::pair<mesos::v1::FrameworkID, mesos::v1::ExecutorID>>
692 {
693  typedef size_t result_type;
694 
695  typedef std::pair<
696  mesos::v1::FrameworkID, mesos::v1::ExecutorID> argument_type;
697 
698  result_type operator()(const argument_type& pair) const
699  {
700  size_t seed = 0;
701  boost::hash_combine(seed, std::hash<mesos::v1::FrameworkID>()(pair.first));
702  boost::hash_combine(seed, std::hash<mesos::v1::ExecutorID>()(pair.second));
703  return seed;
704  }
705 };
706 
707 
708 template <>
709 struct hash<mesos::v1::MachineID>
710 {
711  typedef size_t result_type;
712 
713  typedef mesos::v1::MachineID argument_type;
714 
715  result_type operator()(const argument_type& machineId) const
716  {
717  size_t seed = 0;
718  boost::hash_combine(seed, strings::lower(machineId.hostname()));
719  boost::hash_combine(seed, machineId.ip());
720  return seed;
721  }
722 };
723 
724 
725 template <>
726 struct hash<mesos::v1::OperationID>
727 {
728  typedef size_t result_type;
729 
730  typedef mesos::v1::OperationID argument_type;
731 
732  result_type operator()(const argument_type& operationId) const
733  {
734  size_t seed = 0;
735  boost::hash_combine(seed, operationId.value());
736  return seed;
737  }
738 };
739 
740 
741 template <>
742 struct hash<mesos::v1::ResourceProviderID>
743 {
744  typedef size_t result_type;
745 
746  typedef mesos::v1::ResourceProviderID argument_type;
747 
748  result_type operator()(const argument_type& resourceProviderId) const
749  {
750  size_t seed = 0;
751  boost::hash_combine(seed, resourceProviderId.value());
752  return seed;
753  }
754 };
755 
756 } // namespace std {
757 
758 #endif // __MESOS_V1_HPP__
mesos::v1::TaskStatus_Source argument_type
Definition: mesos.hpp:650
result_type operator()(const argument_type &source) const
Definition: mesos.hpp:652
bool equivalent(const FrameworkInfo &left, const FrameworkInfo &right)
size_t result_type
Definition: mesos.hpp:601
mesos::v1::ContainerID argument_type
Definition: mesos.hpp:539
Definition: master.hpp:27
mesos::v1::ResourceProviderID argument_type
Definition: mesos.hpp:746
mesos::v1::ExecutorID argument_type
Definition: mesos.hpp:555
result_type operator()(const argument_type &uri) const
Definition: mesos.hpp:515
size_t result_type
Definition: mesos.hpp:585
Result< ProcessStatus > status(pid_t pid)
Definition: proc.hpp:166
Definition: mesos.hpp:551
size_t result_type
Definition: mesos.hpp:569
result_type operator()(const argument_type &resourceProviderId) const
Definition: mesos.hpp:748
Definition: type_utils.hpp:619
mesos::v1::TaskState argument_type
Definition: mesos.hpp:635
result_type operator()(const argument_type &taskState) const
Definition: mesos.hpp:637
size_t result_type
Definition: mesos.hpp:744
Capability
Definition: capabilities.hpp:35
Operation
Definition: cgroups.hpp:444
result_type operator()(const argument_type &reason) const
Definition: mesos.hpp:667
std::pair< mesos::v1::FrameworkID, mesos::v1::ExecutorID > argument_type
Definition: mesos.hpp:696
mesos::v1::MachineID argument_type
Definition: mesos.hpp:713
size_t result_type
Definition: mesos.hpp:511
mesos::v1::FrameworkID argument_type
Definition: mesos.hpp:571
Definition: agent.hpp:27
Definition: agent.hpp:25
result_type operator()(const argument_type &executorId) const
Definition: mesos.hpp:557
size_t result_type
Definition: mesos.hpp:648
bool operator==(const CommandInfo &left, const CommandInfo &right)
size_t result_type
Definition: mesos.hpp:711
size_t result_type
Definition: mesos.hpp:728
mesos::v1::AgentID argument_type
Definition: mesos.hpp:603
mesos::v1::TaskStatus_Reason argument_type
Definition: mesos.hpp:665
Option< std::string > diff(const FrameworkInfo &left, const FrameworkInfo &right)
result_type operator()(const argument_type &frameworkId) const
Definition: mesos.hpp:573
mesos::v1::OperationID argument_type
Definition: mesos.hpp:730
Type
Definition: capabilities.hpp:82
CSIPluginContainerInfo::Service Service
Definition: service_manager.hpp:38
Definition: mesos.hpp:567
result_type operator()(const argument_type &imageType) const
Definition: mesos.hpp:682
mesos::v1::Image::Type argument_type
Definition: mesos.hpp:680
size_t result_type
Definition: mesos.hpp:633
Try< uint32_t > type(const std::string &path)
bool operator<(const ContainerID &left, const ContainerID &right)
Definition: mesos.hpp:334
size_t result_type
Definition: mesos.hpp:663
mesos::v1::TaskID argument_type
Definition: mesos.hpp:619
size_t result_type
Definition: mesos.hpp:553
Definition: uri.hpp:21
bool operator!=(const Labels &left, const Labels &right)
result_type operator()(const argument_type &offerId) const
Definition: mesos.hpp:589
size_t result_type
Definition: mesos.hpp:617
result_type operator()(const argument_type &machineId) const
Definition: mesos.hpp:715
result_type operator()(const argument_type &containerId) const
Definition: mesos.hpp:541
mesos::v1::OfferID argument_type
Definition: mesos.hpp:587
result_type operator()(const argument_type &operationId) const
Definition: mesos.hpp:732
mesos::v1::CommandInfo::URI argument_type
Definition: mesos.hpp:513
result_type operator()(const argument_type &taskId) const
Definition: mesos.hpp:621
size_t result_type
Definition: mesos.hpp:678
std::string lower(const std::string &s)
Definition: strings.hpp:429
std::ostream & operator<<(std::ostream &stream, const Attribute &attribute)
result_type operator()(const argument_type &pair) const
Definition: mesos.hpp:698
size_t result_type
Definition: mesos.hpp:537
result_type operator()(const argument_type &agentId) const
Definition: mesos.hpp:605