Exemple #1
0
func (db *ETCDDB) rawActualLRPGroupByProcessGuidAndIndex(logger lager.Logger, processGuid string, index int32) (*models.ActualLRPGroup, error) {
	node, err := db.fetchRecursiveRaw(logger, ActualLRPIndexDir(processGuid, index))
	if err != nil {
		return nil, err
	}

	group := models.ActualLRPGroup{}
	for _, instanceNode := range node.Nodes {
		var lrp models.ActualLRP
		deserializeErr := db.deserializeModel(logger, instanceNode, &lrp)
		if deserializeErr != nil {
			logger.Error("failed-parsing-actual-lrp", deserializeErr, lager.Data{"key": instanceNode.Key})
			return nil, deserializeErr
		}

		if isInstanceActualLRPNode(instanceNode) {
			group.Instance = &lrp
		}

		if isEvacuatingActualLRPNode(instanceNode) {
			group.Evacuating = &lrp
		}
	}

	if group.Evacuating == nil && group.Instance == nil {
		return nil, models.ErrResourceNotFound
	}

	return &group, nil
}
						for i := 0; i < actualHub.EmitCallCount(); i++ {
							switch event := actualHub.EmitArgsForCall(i).(type) {
							case *models.ActualLRPCreatedEvent:
								Expect(event.ActualLrpGroup).To(Equal(&models.ActualLRPGroup{Evacuating: afterActual}))
							default:
								Fail(fmt.Sprintf("unexpected event %#v", event))
							}
						}
					})

					Context("when there's an existing evacuating on another cell", func() {
						BeforeEach(func() {
							evacuatingLRP := model_helpers.NewValidActualLRP("the-guid", 1)
							evacuatingLRP.CellId = "some-other-cell"
							actualLRPGroup.Evacuating = evacuatingLRP
						})

						It("does not error and does not keep the container", func() {
							response := models.EvacuationResponse{}
							err := response.Unmarshal(responseRecorder.Body.Bytes())
							Expect(err).NotTo(HaveOccurred())
							Expect(response.KeepContainer).To(BeFalse())
							Expect(response.Error).To(BeNil())
						})
					})

					Context("when evacuating the actual lrp fails", func() {
						BeforeEach(func() {
							fakeEvacuationDB.EvacuateActualLRPReturns(nil, errors.New("didnt work"))
						})