.map(o -> o.getId().getValue()) .collect(Collectors.toSet()); Assert.assertTrue(String.format(
/** * This method removes an offer from the queue based on its OfferID. */ public void remove(Protos.OfferID offerID) { Collection<Protos.Offer> offers = queue.parallelStream() .filter(offer -> offer.getId().equals(offerID)) .collect(Collectors.toList()); boolean removed = queue.removeAll(offers); if (!removed) { logger.warning( String.format( "Attempted to remove offer: '%s' but it was not present in the queue.", offerID.getValue())); } else { logger.info(String.format("Removed offer: %s", offerID.getValue())); Metrics.metricRegistry().meter("mesos.offer.queue.removed").mark(); } }
/** * <code>repeated .mesos.OfferID inverse_offer_ids = 1;</code> */ public org.apache.mesos.Protos.OfferID.Builder addInverseOfferIdsBuilder( int index) { return getInverseOfferIdsFieldBuilder().addBuilder( index, org.apache.mesos.Protos.OfferID.getDefaultInstance()); } /**
"Ignoring malformed resource in offer {} as neither namespace label nor default" + " service is found): {}", offer.getId().getValue(), TextFormat.shortDebugString(resource));
logger.info("Offer {}, {}: failed {} of {} evaluation stages for {}:\n{}", i + 1, offer.getId().getValue(), failedOutcomeCount, evaluationStages.size(),
.setHostname(ci.getContainerInstanceArn()) .setFrameworkId(frameworkInfo.getId()) .setId(Protos.OfferID.newBuilder().setValue(ci.getContainerInstanceArn()).build()) .setSlaveId(Protos.SlaveID.newBuilder().setValue(ci.getContainerInstanceArn()).build());
final String id = offer.getId().getValue() + "-" + String.valueOf(j); final String executorLaunchCommand = getExecutorLaunchCommand(id, resourceRequestEvent.getMemorySize().get());
"Filtered {} resources from offer {}:", badResources.size(), offer.getId().getValue()); for (Protos.Resource badResource : badResources) { LOGGER.info(" {}", TextFormat.shortDebugString(badResource));
offerRecommendations.size() == 1 ? "" : "s", offerRecommendations.stream() .map(rec -> rec.getOfferId().getValue()) .collect(Collectors.toSet()));
containerInstanceIDs.add(offerID.getValue());
.map(o -> o.getId().getValue()) .collect(Collectors.toList()));
if (!queued) { LOGGER.warn("Offer queue is full: Declining offer and removing from in progress: '{}'", offer.getId().getValue()); declineShort(Collections.singletonList(offer));
/** * All offers in each batch of offers will be either be launched or declined. */ @Override @SuppressWarnings("checkstyle:hiddenfield") public void resourceOffers(final SchedulerDriver driver, final List<Protos.Offer> offers) { final Map<String, NodeDescriptorEventImpl.Builder> nodeDescriptorEvents = new HashMap<>(); for (final Offer offer : offers) { if (nodeDescriptorEvents.get(offer.getSlaveId().getValue()) == null) { nodeDescriptorEvents.put(offer.getSlaveId().getValue(), NodeDescriptorEventImpl.newBuilder() .setIdentifier(offer.getSlaveId().getValue()) .setHostName(offer.getHostname()) .setPort(this.mesosSlavePort) .setMemorySize(getMemory(offer))); } else { final NodeDescriptorEventImpl.Builder builder = nodeDescriptorEvents.get(offer.getSlaveId().getValue()); builder.setMemorySize(builder.build().getMemorySize() + getMemory(offer)); } this.offers.put(offer.getId().getValue(), offer); } for (final NodeDescriptorEventImpl.Builder ndpBuilder : nodeDescriptorEvents.values()) { this.reefEventHandlers.onNodeDescriptor(ndpBuilder.build()); } if (outstandingRequests.size() > 0) { doResourceRequest(outstandingRequests.remove()); } }
@Override public void resourceOffers(SchedulerDriver schedulerDriver, List<Protos.Offer> offers) { logger.info("Initiating new offer round of " + offers.size() + " offers"); AtomicInteger acceptedOffers = new AtomicInteger(0); AtomicInteger rejectedOffers = new AtomicInteger(0); offers.stream() .peek(offer -> logger.debug("Received offerId=" + offer.getId().getValue() + " for slaveId=" + offer.getSlaveId().getValue())) .map(offer -> offerStrategyFilter.evaluate(uuidSupplier.get().toString(), offer)) .peek(offerEvaluation -> (offerEvaluation.isValid() ? acceptedOffers : rejectedOffers).incrementAndGet()) .filter(StreamHelper.onNegative( OfferEvaluation::isValid, offerEvaluation -> schedulerDriver.declineOffer(offerEvaluation.getOffer().getId()))) .peek(offerEvaluation -> logger.info("Accepting offer offerId=" + offerEvaluation.getOffer().getId().getValue() + " on slaveId=" + offerEvaluation.getOffer().getSlaveId().getValue())) .map(taskMaterializer::createProposal) // .peek(taskProposal -> logger.debug("Launching task " + taskProposal.getTaskInfo().toString())) .forEach(taskProposal -> { schedulerDriver.launchTasks(Collections.singleton(taskProposal.getOfferId()), Collections.singleton(taskProposal.getTaskInfo())); stateRepository.store(taskProposal.taskInfo); }); logger.info("Finished evaluating " + offers.size() + " offers. Accepted " + acceptedOffers.get() + " offers and rejected " + rejectedOffers.get()); }
public static Protos.Offer generateUpdateOffer( String frameworkId, Protos.TaskInfo taskInfo, Protos.TaskInfo templateTaskInfo, double cpu, int memory, int disk) { final String offerUUID = UUID.randomUUID().toString(); return Protos.Offer .newBuilder() .setId(Protos.OfferID.newBuilder().setValue(offerUUID)) .setFrameworkId(Protos.FrameworkID.newBuilder().setValue(frameworkId)) .setSlaveId(Protos.SlaveID.newBuilder().setValue(taskInfo.getSlaveId().getValue())) .setHostname("127.0.0.1") .addAllResources(taskInfo.getResourcesList()) .addAllResources(taskInfo.getExecutor().getResourcesList()) .addAllResources(templateTaskInfo.getResourcesList()) .addResources(ResourceUtils.getUnreservedScalar("cpus", cpu)) .addResources(ResourceUtils.getUnreservedScalar("mem", memory)) .addResources(ResourceUtils.getUnreservedScalar("disk", disk)) .build(); }
/** * <code>required .mesos.OfferID inverse_offer_id = 1;</code> */ public Builder mergeInverseOfferId(org.apache.mesos.Protos.OfferID value) { if (inverseOfferIdBuilder_ == null) { if (((bitField0_ & 0x00000001) == 0x00000001) && inverseOfferId_ != null && inverseOfferId_ != org.apache.mesos.Protos.OfferID.getDefaultInstance()) { inverseOfferId_ = org.apache.mesos.Protos.OfferID.newBuilder(inverseOfferId_).mergeFrom(value).buildPartial(); } else { inverseOfferId_ = value; } onChanged(); } else { inverseOfferIdBuilder_.mergeFrom(value); } bitField0_ |= 0x00000001; return this; } /**
/** * <code>required .mesos.OfferID offer_id = 1;</code> */ public Builder mergeOfferId(org.apache.mesos.Protos.OfferID value) { if (offerIdBuilder_ == null) { if (((bitField0_ & 0x00000001) == 0x00000001) && offerId_ != null && offerId_ != org.apache.mesos.Protos.OfferID.getDefaultInstance()) { offerId_ = org.apache.mesos.Protos.OfferID.newBuilder(offerId_).mergeFrom(value).buildPartial(); } else { offerId_ = value; } onChanged(); } else { offerIdBuilder_.mergeFrom(value); } bitField0_ |= 0x00000001; return this; } /**
@Test public void testFilterAcceptedOffersAcceptedInvalidId() { List<Protos.Resource> resources = Arrays.asList( ResourceTestUtils.getUnreservedCpus(2), ResourceTestUtils.getUnreservedMem(1000), ResourceTestUtils.getUnreservedDisk(10000)); final List<Protos.Offer> unacceptedOffers = OfferUtils.filterOutAcceptedOffers( OFFERS, Arrays.asList( toOfferRecommendation(Protos.Offer.newBuilder(OfferTestUtils.getOffer(resources)) .setId(Protos.OfferID.newBuilder().setValue("abc")) .build(), false), toOfferRecommendation(Protos.Offer.newBuilder(OfferTestUtils.getOffer(resources)) .setId(Protos.OfferID.newBuilder().setValue("def")) .build(), true))); Assert.assertEquals( Arrays.asList("no-operation", "with-without-operation", "with-operation", "no-recommendation"), unacceptedOffers.stream().map(o -> o.getId().getValue()).collect(Collectors.toList())); }