本文整理匯總了Golang中code/cloudfoundry/org/bbs/models.ActualLRP.ActualLRPInstanceKey方法的典型用法代碼示例。如果您正苦於以下問題:Golang ActualLRP.ActualLRPInstanceKey方法的具體用法?Golang ActualLRP.ActualLRPInstanceKey怎麽用?Golang ActualLRP.ActualLRPInstanceKey使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類code/cloudfoundry/org/bbs/models.ActualLRP
的用法示例。
在下文中一共展示了ActualLRP.ActualLRPInstanceKey方法的10個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: ClaimActualLRP
func (db *SQLDB) ClaimActualLRP(logger lager.Logger, processGuid string, index int32, instanceKey *models.ActualLRPInstanceKey) (*models.ActualLRPGroup, *models.ActualLRPGroup, error) {
logger = logger.WithData(lager.Data{"process_guid": processGuid, "index": index, "instance_key": instanceKey})
logger.Info("starting")
defer logger.Info("complete")
var beforeActualLRP models.ActualLRP
var actualLRP *models.ActualLRP
err := db.transact(logger, func(logger lager.Logger, tx *sql.Tx) error {
var err error
actualLRP, err = db.fetchActualLRPForUpdate(logger, processGuid, index, false, tx)
if err != nil {
logger.Error("failed-fetching-actual-lrp-for-share", err)
return err
}
beforeActualLRP = *actualLRP
if !actualLRP.AllowsTransitionTo(&actualLRP.ActualLRPKey, instanceKey, models.ActualLRPStateClaimed) {
logger.Error("cannot-transition-to-claimed", nil, lager.Data{"from_state": actualLRP.State, "same_instance_key": actualLRP.ActualLRPInstanceKey.Equal(instanceKey)})
return models.ErrActualLRPCannotBeClaimed
}
if actualLRP.State == models.ActualLRPStateClaimed && actualLRP.ActualLRPInstanceKey.Equal(instanceKey) {
return nil
}
actualLRP.ModificationTag.Increment()
actualLRP.State = models.ActualLRPStateClaimed
actualLRP.ActualLRPInstanceKey = *instanceKey
actualLRP.PlacementError = ""
actualLRP.ActualLRPNetInfo = models.ActualLRPNetInfo{}
actualLRP.Since = db.clock.Now().UnixNano()
_, err = db.update(logger, tx, actualLRPsTable,
SQLAttributes{
"state": actualLRP.State,
"cell_id": actualLRP.CellId,
"instance_guid": actualLRP.InstanceGuid,
"modification_tag_index": actualLRP.ModificationTag.Index,
"placement_error": actualLRP.PlacementError,
"since": actualLRP.Since,
"net_info": []byte{},
},
"process_guid = ? AND instance_index = ? AND evacuating = ?",
processGuid, index, false,
)
if err != nil {
logger.Error("failed-claiming-actual-lrp", err)
return db.convertSQLError(err)
}
return nil
})
return &models.ActualLRPGroup{Instance: &beforeActualLRP}, &models.ActualLRPGroup{Instance: actualLRP}, err
}
示例2: unclaimActualLRPWithIndex
func (db *ETCDDB) unclaimActualLRPWithIndex(
logger lager.Logger,
lrp *models.ActualLRP,
storeIndex uint64,
actualLRPKey *models.ActualLRPKey,
actualLRPInstanceKey *models.ActualLRPInstanceKey,
) (change stateChange, err error) {
logger = logger.Session("unclaim-actual-lrp-with-index")
defer logger.Debug("complete", lager.Data{"state_change": change, "error": err})
if !lrp.ActualLRPKey.Equal(actualLRPKey) {
logger.Error("failed-actual-lrp-key-differs", models.ErrActualLRPCannotBeUnclaimed)
return stateDidNotChange, models.ErrActualLRPCannotBeUnclaimed
}
if lrp.State == models.ActualLRPStateUnclaimed {
logger.Info("already-unclaimed")
return stateDidNotChange, nil
}
if !lrp.ActualLRPInstanceKey.Equal(actualLRPInstanceKey) {
logger.Error("failed-actual-lrp-instance-key-differs", models.ErrActualLRPCannotBeUnclaimed)
return stateDidNotChange, models.ErrActualLRPCannotBeUnclaimed
}
lrp.Since = db.clock.Now().UnixNano()
lrp.State = models.ActualLRPStateUnclaimed
lrp.ActualLRPInstanceKey = models.ActualLRPInstanceKey{}
lrp.ActualLRPNetInfo = models.EmptyActualLRPNetInfo()
lrp.ModificationTag.Increment()
err = lrp.Validate()
if err != nil {
logger.Error("failed-to-validate-unclaimed-lrp", err)
return stateDidNotChange, models.NewError(models.Error_InvalidRecord, err.Error())
}
lrpData, serialErr := db.serializeModel(logger, lrp)
if serialErr != nil {
logger.Error("failed-to-marshal-unclaimed-lrp", serialErr)
return stateDidNotChange, serialErr
}
_, err = db.client.CompareAndSwap(ActualLRPSchemaPath(actualLRPKey.ProcessGuid, actualLRPKey.Index), lrpData, 0, storeIndex)
if err != nil {
logger.Error("failed-to-compare-and-swap", err)
return stateDidNotChange, models.ErrActualLRPCannotBeUnclaimed
}
logger.Debug("changed-to-unclaimed")
return stateDidChange, nil
}
示例3: lrpForState
func lrpForState(state string, timeInState time.Duration) models.ActualLRP {
var actualLRPKey = models.NewActualLRPKey("some-process-guid", 1, "tests")
var instanceKey = models.NewActualLRPInstanceKey("some-instance-guid", "some-cell")
lrp := models.ActualLRP{
ActualLRPKey: actualLRPKey,
State: state,
Since: clock.Now().Add(-timeInState).UnixNano(),
}
switch state {
case models.ActualLRPStateUnclaimed:
case models.ActualLRPStateCrashed:
lrp.CrashReason = "crashed"
case models.ActualLRPStateClaimed:
lrp.ActualLRPInstanceKey = instanceKey
case models.ActualLRPStateRunning:
lrp.ActualLRPInstanceKey = instanceKey
lrp.ActualLRPNetInfo = models.NewActualLRPNetInfo("1.2.3.4", &models.PortMapping{ContainerPort: 1234, HostPort: 5678})
}
return lrp
}
示例4: itValidatesAbsenceOfTheInstanceKey
func itValidatesAbsenceOfTheInstanceKey(lrp *models.ActualLRP) {
Context("when the instance key is set", func() {
BeforeEach(func() {
lrp.ActualLRPInstanceKey = models.NewActualLRPInstanceKey("some-instance", "some-cell")
})
It("validate returns an error", func() {
err := lrp.Validate()
Expect(err).To(HaveOccurred())
Expect(err.Error()).To(ContainSubstring("instance key"))
})
})
Context("when the instance key is not set", func() {
BeforeEach(func() {
lrp.ActualLRPInstanceKey = models.ActualLRPInstanceKey{}
})
It("validate does not return an error", func() {
Expect(lrp.Validate()).NotTo(HaveOccurred())
})
})
}
示例5:
desiredLRP1 = model_helpers.NewValidDesiredLRP("to-unclaim-1").DesiredLRPSchedulingInfo()
unclaimingActualLRP1 = model_helpers.NewValidActualLRP("to-unclaim-1", 0)
desiredLRP2 = model_helpers.NewValidDesiredLRP("to-unclaim-2").DesiredLRPSchedulingInfo()
unclaimingActualLRP2 = model_helpers.NewValidActualLRP("to-unclaim-2", 1)
keysWithMissingCells = []*models.ActualLRPKeyWithSchedulingInfo{
{Key: &unclaimingActualLRP1.ActualLRPKey, SchedulingInfo: &desiredLRP1},
{Key: &unclaimingActualLRP2.ActualLRPKey, SchedulingInfo: &desiredLRP2},
}
keysToAuction = []*auctioneer.LRPStartRequest{&request1, &request2}
cellID = "cell-id"
instanceKey := models.NewActualLRPInstanceKey("instance-guid", cellID)
retiringActualLRP1.CellId = cellID
retiringActualLRP1.ActualLRPInstanceKey = instanceKey
retiringActualLRP1.State = models.ActualLRPStateClaimed
group1 := &models.ActualLRPGroup{Instance: retiringActualLRP1}
retiringActualLRP2.CellId = cellID
retiringActualLRP2.ActualLRPInstanceKey = instanceKey
retiringActualLRP2.State = models.ActualLRPStateClaimed
group2 := &models.ActualLRPGroup{Instance: retiringActualLRP2}
fakeLRPDB.ActualLRPGroupByProcessGuidAndIndexStub = func(_ lager.Logger, processGuid string, _ int32) (*models.ActualLRPGroup, error) {
if processGuid == retiringActualLRP1.ProcessGuid {
return group1, nil
}
if processGuid == retiringActualLRP2.ProcessGuid {
return group2, nil
}
示例6:
})
})
Context("when the LRP is Claimed or Running", func() {
var (
cellID string
cellPresence models.CellPresence
instanceKey models.ActualLRPInstanceKey
)
BeforeEach(func() {
cellID = "cell-id"
instanceKey = models.NewActualLRPInstanceKey("instance-guid", cellID)
actualLRP.CellId = cellID
actualLRP.ActualLRPInstanceKey = instanceKey
actualLRPGroup.Instance.State = models.ActualLRPStateClaimed
fakeActualLRPDB.ActualLRPGroupByProcessGuidAndIndexReturns(actualLRPGroup, nil)
})
Context("when the cell", func() {
Context("is present", func() {
BeforeEach(func() {
cellPresence = models.NewCellPresence(
cellID,
"cell1.addr",
"",
"the-zone",
models.NewCellCapacity(128, 1024, 6),
[]string{},
[]string{},
示例7: StartActualLRP
func (db *SQLDB) StartActualLRP(logger lager.Logger, key *models.ActualLRPKey, instanceKey *models.ActualLRPInstanceKey, netInfo *models.ActualLRPNetInfo) (*models.ActualLRPGroup, *models.ActualLRPGroup, error) {
logger = logger.WithData(lager.Data{"actual_lrp_key": key, "actual_lrp_instance_key": instanceKey, "net_info": netInfo})
var beforeActualLRP models.ActualLRP
var actualLRP *models.ActualLRP
err := db.transact(logger, func(logger lager.Logger, tx *sql.Tx) error {
var err error
actualLRP, err = db.fetchActualLRPForUpdate(logger, key.ProcessGuid, key.Index, false, tx)
if err == models.ErrResourceNotFound {
actualLRP, err = db.createRunningActualLRP(logger, key, instanceKey, netInfo, tx)
return err
}
if err != nil {
logger.Error("failed-to-get-actual-lrp", err)
return err
}
beforeActualLRP = *actualLRP
if actualLRP.ActualLRPKey.Equal(key) &&
actualLRP.ActualLRPInstanceKey.Equal(instanceKey) &&
actualLRP.ActualLRPNetInfo.Equal(netInfo) &&
actualLRP.State == models.ActualLRPStateRunning {
logger.Debug("nothing-to-change")
return nil
}
if !actualLRP.AllowsTransitionTo(key, instanceKey, models.ActualLRPStateRunning) {
logger.Error("failed-to-transition-actual-lrp-to-started", nil)
return models.ErrActualLRPCannotBeStarted
}
logger.Info("starting")
defer logger.Info("completed")
now := db.clock.Now().UnixNano()
evacuating := false
actualLRP.ActualLRPInstanceKey = *instanceKey
actualLRP.ActualLRPNetInfo = *netInfo
actualLRP.State = models.ActualLRPStateRunning
actualLRP.Since = now
actualLRP.ModificationTag.Increment()
actualLRP.PlacementError = ""
netInfoData, err := db.serializeModel(logger, &actualLRP.ActualLRPNetInfo)
if err != nil {
logger.Error("failed-to-serialize-net-info", err)
return err
}
_, err = db.update(logger, tx, actualLRPsTable,
SQLAttributes{
"state": actualLRP.State,
"cell_id": actualLRP.CellId,
"instance_guid": actualLRP.InstanceGuid,
"modification_tag_index": actualLRP.ModificationTag.Index,
"placement_error": actualLRP.PlacementError,
"since": actualLRP.Since,
"net_info": netInfoData,
},
"process_guid = ? AND instance_index = ? AND evacuating = ?",
key.ProcessGuid, key.Index, evacuating,
)
if err != nil {
logger.Error("failed-starting-actual-lrp", err)
return db.convertSQLError(err)
}
return nil
})
return &models.ActualLRPGroup{Instance: &beforeActualLRP}, &models.ActualLRPGroup{Instance: actualLRP}, err
}
示例8:
It("returns the previous and the next actual lrp group", func() {
before, after, err := etcdDB.UnclaimActualLRP(logger, lrpKey)
Expect(err).NotTo(HaveOccurred())
Expect(before).To(Equal(&models.ActualLRPGroup{Instance: actualLRP}))
group, err := etcdDB.ActualLRPGroupByProcessGuidAndIndex(logger, guid, index)
Expect(err).NotTo(HaveOccurred())
Expect(after).To(Equal(group))
})
Context("when the actual lrp is already unclaimed", func() {
BeforeEach(func() {
actualLRP.State = models.ActualLRPStateUnclaimed
actualLRP.ActualLRPNetInfo = models.EmptyActualLRPNetInfo()
actualLRP.ActualLRPInstanceKey = models.ActualLRPInstanceKey{}
etcdHelper.SetRawActualLRP(actualLRP)
})
It("returns an error", func() {
_, _, err := etcdDB.UnclaimActualLRP(logger, lrpKey)
Expect(err).To(HaveOccurred())
})
})
Context("when compare and swap fails", func() {
BeforeEach(func() {
fakeStoreClient.CompareAndSwapReturns(nil, errors.New("OOOOOH NOSE!"))
node, err := storeClient.Get(ActualLRPSchemaPath(guid, index), false, false)
fakeStoreClient.GetReturns(node, err)
示例9:
{models.ActualLRPStateCrashed, models.ActualLRPStateClaimed, claimedKey, equivalentClaimedKey, true},
{models.ActualLRPStateCrashed, models.ActualLRPStateClaimed, claimedKey, differentInstanceGuidKey, false},
{models.ActualLRPStateCrashed, models.ActualLRPStateClaimed, claimedKey, differentCellIDKey, false},
{models.ActualLRPStateCrashed, models.ActualLRPStateRunning, claimedKey, equivalentClaimedKey, true},
{models.ActualLRPStateCrashed, models.ActualLRPStateRunning, claimedKey, differentInstanceGuidKey, false},
{models.ActualLRPStateCrashed, models.ActualLRPStateRunning, claimedKey, differentCellIDKey, false},
{models.ActualLRPStateCrashed, models.ActualLRPStateCrashed, claimedKey, equivalentClaimedKey, false},
{models.ActualLRPStateCrashed, models.ActualLRPStateCrashed, claimedKey, differentInstanceGuidKey, false},
{models.ActualLRPStateCrashed, models.ActualLRPStateCrashed, claimedKey, differentCellIDKey, false},
}
for _, entry := range stateTable {
entry := entry
It(EntryToString(entry), func() {
before.State = entry.BeforeState
before.ActualLRPInstanceKey = entry.BeforeInstanceKey
Expect(before.AllowsTransitionTo(&before.ActualLRPKey, &entry.AfterInstanceKey, entry.AfterState)).To(Equal(entry.Allowed))
})
}
})
})
Describe("Validate", func() {
Context("when state is unclaimed", func() {
BeforeEach(func() {
lrp = models.ActualLRP{
ActualLRPKey: lrpKey,
State: models.ActualLRPStateUnclaimed,
Since: 1138,
}
})
示例10: EvacuateActualLRP
func (db *SQLDB) EvacuateActualLRP(
logger lager.Logger,
lrpKey *models.ActualLRPKey,
instanceKey *models.ActualLRPInstanceKey,
netInfo *models.ActualLRPNetInfo,
ttl uint64,
) (*models.ActualLRPGroup, error) {
logger = logger.Session("evacuate-lrp", lager.Data{"lrp_key": lrpKey, "instance_key": instanceKey, "net_info": netInfo})
logger.Debug("starting")
defer logger.Debug("complete")
var actualLRP *models.ActualLRP
err := db.transact(logger, func(logger lager.Logger, tx *sql.Tx) error {
var err error
processGuid := lrpKey.ProcessGuid
index := lrpKey.Index
actualLRP, err = db.fetchActualLRPForUpdate(logger, processGuid, index, true, tx)
if err == models.ErrResourceNotFound {
logger.Debug("creating-evacuating-lrp")
actualLRP, err = db.createEvacuatingActualLRP(logger, lrpKey, instanceKey, netInfo, ttl, tx)
return err
}
if err != nil {
logger.Error("failed-locking-lrp", err)
return err
}
if actualLRP.ActualLRPKey.Equal(lrpKey) &&
actualLRP.ActualLRPInstanceKey.Equal(instanceKey) &&
reflect.DeepEqual(actualLRP.ActualLRPNetInfo, *netInfo) {
logger.Debug("evacuating-lrp-already-exists")
return nil
}
now := db.clock.Now().UnixNano()
actualLRP.ModificationTag.Increment()
actualLRP.ActualLRPKey = *lrpKey
actualLRP.ActualLRPInstanceKey = *instanceKey
actualLRP.Since = now
actualLRP.ActualLRPNetInfo = *netInfo
netInfoData, err := db.serializeModel(logger, netInfo)
if err != nil {
logger.Error("failed-serializing-net-info", err)
return err
}
_, err = db.update(logger, tx, "actual_lrps",
SQLAttributes{
"domain": actualLRP.Domain,
"instance_guid": actualLRP.InstanceGuid,
"cell_id": actualLRP.CellId,
"net_info": netInfoData,
"state": actualLRP.State,
"since": actualLRP.Since,
"modification_tag_index": actualLRP.ModificationTag.Index,
},
"process_guid = ? AND instance_index = ? AND evacuating = ?",
actualLRP.ProcessGuid, actualLRP.Index, true,
)
if err != nil {
logger.Error("failed-update-evacuating-lrp", err)
return db.convertSQLError(err)
}
return nil
})
return &models.ActualLRPGroup{Evacuating: actualLRP}, err
}