MCPcopy Create free account
hub / github.com/apache/mesos / convertResourcesImpl

Function convertResourcesImpl

src/common/resources_utils.cpp:510–562  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

508
509
510static Try<Nothing> convertResourcesImpl(
511 Message* message,
512 Try<Nothing> (*convertResource)(mesos::Resource* resource),
513 const hashmap<const Descriptor*, bool>& resourcesContainment)
514{
515 CHECK_NOTNULL(message);
516
517 const Descriptor* descriptor = message->GetDescriptor();
518
519 if (descriptor == mesos::Resource::descriptor()) {
520 return convertResource(static_cast<mesos::Resource*>(message));
521 }
522
523 const google::protobuf::Reflection* reflection = message->GetReflection();
524
525 for (int i = 0; i < descriptor->field_count(); ++i) {
526 const google::protobuf::FieldDescriptor* field = descriptor->field(i);
527 const Descriptor* messageDescriptor = field->message_type();
528
529 if (messageDescriptor == nullptr ||
530 !resourcesContainment.at(messageDescriptor)) {
531 continue;
532 }
533
534 if (!field->is_repeated()) {
535 if (reflection->HasField(*message, field)) {
536 Try<Nothing> result = convertResourcesImpl(
537 reflection->MutableMessage(message, field),
538 convertResource,
539 resourcesContainment);
540
541 if (result.isError()) {
542 return result;
543 }
544 }
545 } else {
546 const int size = reflection->FieldSize(*message, field);
547
548 for (int j = 0; j < size; ++j) {
549 Try<Nothing> result = convertResourcesImpl(
550 reflection->MutableRepeatedMessage(message, field, j),
551 convertResource,
552 resourcesContainment);
553
554 if (result.isError()) {
555 return result;
556 }
557 }
558 }
559 }
560
561 return Nothing();
562}
563
564} // namespace internal {
565

Callers 2

upgradeResourcesFunction · 0.85
downgradeResourcesFunction · 0.85

Calls 4

NothingClass · 0.85
fieldMethod · 0.80
atMethod · 0.80
isErrorMethod · 0.45

Tested by

no test coverage detected