本文整理汇总了Golang中github.com/square/p2/pkg/kp.Session类的典型用法代码示例。如果您正苦于以下问题:Golang Session类的具体用法?Golang Session怎么用?Golang Session使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Session类的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: handleReplicationEnd
// handleReplicationEnd listens for various events that can cause the replication to end.
//
// These are:
// * The replication signals that it has finished executing.
// * The replication is canceled.
// * Errors in lock renewal (as signaled on the passed channel).
// In this case, the error needs to be communicated up a level.
// The passed channel may be nil, in which case this case is not checked,
// but the others still are.
//
// When replication finishes for any of these reasons, this function is responsible for:
// * Stopping the replication (if it has not already)
// * Destroying its session (passed in to this function.
// Passing nil is legal, in which case it is not destroyed)
func (r *replication) handleReplicationEnd(session kp.Session, renewalErrCh chan error) {
defer func() {
close(r.quitCh)
close(r.errCh)
if r.rateLimiter != nil {
r.rateLimiter.Stop()
}
if session != nil {
_ = session.Destroy()
}
}()
select {
case <-r.replicationDoneCh:
case <-r.replicationCancelledCh:
// If the replication is enacted, wait for it to exit
<-r.enactedCh
case err := <-renewalErrCh:
// communicate the error to the caller.
r.errCh <- replicationError{
err: err,
isFatal: true,
}
return
}
}
开发者ID:petertseng,项目名称:p2,代码行数:40,代码来源:replication.go
示例2: lock
// Attempts to claim a lock. If the overrideLock is set, any existing lock holder
// will be destroyed and one more attempt will be made to acquire the lock
func (r *replication) lock(session kp.Session, lockPath string, overrideLock bool) (consulutil.Unlocker, error) {
unlocker, err := session.Lock(lockPath)
if _, ok := err.(consulutil.AlreadyLockedError); ok {
holder, id, err := r.store.LockHolder(lockPath)
if err != nil {
return nil, util.Errorf("Lock already held for %q, could not determine holder due to error: %s", lockPath, err)
} else if holder == "" {
// we failed to acquire this lock, but there is no outstanding
// holder
// this indicates that the previous holder had a LockDelay,
// which prevents other parties from acquiring the lock for a
// limited time
return nil, util.Errorf("Lock for %q is blocked due to delay by previous holder", lockPath)
} else if overrideLock {
err = r.store.DestroyLockHolder(id)
if err != nil {
return nil, util.Errorf("Unable to destroy the current lock holder (%s) for %q: %s", holder, lockPath, err)
}
// try acquiring the lock again, but this time don't destroy holders so we don't try forever
return r.lock(session, lockPath, false)
} else {
return nil, util.Errorf("Lock for %q already held by lock %q", lockPath, holder)
}
}
return unlocker, err
}
开发者ID:petertseng,项目名称:p2,代码行数:32,代码来源:replication.go
示例3: LockForOwnership
// Acquires a lock on the DS that should be used by DS farm goroutines, whose
// job it is to carry out the intent of the DS
func (s *consulStore) LockForOwnership(dsID fields.ID, session kp.Session) (consulutil.Unlocker, error) {
lockPath, err := s.dsLockPath(dsID)
if err != nil {
return nil, err
}
return session.Lock(lockPath)
}
开发者ID:petertseng,项目名称:p2,代码行数:9,代码来源:consul_store.go
示例4: LockForOwnership
func (s *FakeDSStore) LockForOwnership(dsID fields.ID, session kp.Session) (consulutil.Unlocker, error) {
lockPath, err := s.dsLockPath(dsID)
if err != nil {
return nil, err
}
s.logger.Logger.Infof("Locking daemon set on the following path: '%v'", lockPath)
return session.Lock(lockPath)
}
开发者ID:petertseng,项目名称:p2,代码行数:8,代码来源:fake_dsstore.go
示例5: LockForUpdateCreation
// Acquires a lock on the RC for ensuring that no two rolling updates are
// created that operate on the same replication controllers. A lock on both
// the intended "new" and "old" replication controllers should be held before
// the update is created.
func (s *consulStore) LockForUpdateCreation(rcID fields.ID, session kp.Session) (consulutil.Unlocker, error) {
updateCreationLockPath, err := s.updateCreationLockPath(rcID)
if err != nil {
return nil, err
}
return session.Lock(updateCreationLockPath)
}
开发者ID:drcapulet,项目名称:p2,代码行数:12,代码来源:consul_store.go
示例6: LockForUpdateCreation
func (s *fakeStore) LockForUpdateCreation(rcID fields.ID, session kp.Session) (consulutil.Unlocker, error) {
key := fmt.Sprintf("%s/%s", rcID, "update_creation_lock")
return session.Lock(key)
}
开发者ID:drcapulet,项目名称:p2,代码行数:4,代码来源:fake_store.go
示例7: LockForOwnership
func (s *fakeStore) LockForOwnership(rcID fields.ID, session kp.Session) (consulutil.Unlocker, error) {
key := fmt.Sprintf("%s/%s", rcID, "ownership_lock")
return session.Lock(key)
}
开发者ID:drcapulet,项目名称:p2,代码行数:4,代码来源:fake_store.go
示例8: CreateRollingUpdateFromOneExistingRCWithID
// Like CreateRollingUpdateFromExistingRCs except will create the new RC based
// on passed parameters, using oldRCID for the old RC. The new RC and new RU
// will be created transactionally (all or nothing)
func (s consulStore) CreateRollingUpdateFromOneExistingRCWithID(
oldRCID rc_fields.ID,
desiredReplicas int,
minimumReplicas int,
leaveOld bool,
rollDelay time.Duration,
newRCManifest manifest.Manifest,
newRCNodeSelector klabels.Selector,
newRCPodLabels klabels.Set,
newRCLabels klabels.Set,
rollLabels klabels.Set,
) (u roll_fields.Update, err error) {
// There are cases where this function will create the new RC and
// subsequently fail, in which case we need to do some cleanup.
// cleans up new RC, might be nil if we didn't create one
var newRCCleanup func()
// If we had an error and the rc cleanup function is set, run it
defer func() {
if err != nil && newRCCleanup != nil {
newRCCleanup()
}
}()
var session kp.Session
var renewalErrCh chan error
session, renewalErrCh, err = s.newRUCreationSession()
if err != nil {
return roll_fields.Update{}, err
}
defer session.Destroy()
rcIDs := rc_fields.IDs{oldRCID}
err = s.lockRCs(rcIDs, session)
if err != nil {
return roll_fields.Update{}, err
}
err = s.checkForConflictingUpdates(rcIDs)
if err != nil {
return roll_fields.Update{}, err
}
// Now create the new RC, first checking if our session is still valid
var newRCID rc_fields.ID
select {
case err = <-renewalErrCh:
return roll_fields.Update{}, err
default:
rc, err := s.rcstore.Create(newRCManifest, newRCNodeSelector, newRCPodLabels)
if err != nil {
return roll_fields.Update{}, err
}
newRCCleanup = func() {
err := s.rcstore.Delete(newRCID, false)
if err != nil {
s.logger.WithError(err).Errorln("Unable to cleanup RC %s after failed RU creation attempt", newRCID)
}
}
newRCID = rc.ID
// Get a lock on the new RC we just created so no parallel
// update creations can use it
err = s.lockRCs(rc_fields.IDs{newRCID}, session)
if err != nil {
return roll_fields.Update{}, err
}
}
rcIDs = append(rcIDs, newRCID)
// Check for conflicts again in case an update was created on the new
// RC between when we created it and locked it
err = s.checkForConflictingUpdates(rcIDs)
if err != nil {
return roll_fields.Update{}, err
}
err = s.labeler.SetLabels(labels.RC, newRCID.String(), newRCLabels)
if err != nil {
return roll_fields.Update{}, err
}
u = roll_fields.Update{
OldRC: oldRCID,
NewRC: newRCID,
DesiredReplicas: desiredReplicas,
MinimumReplicas: minimumReplicas,
LeaveOld: leaveOld,
RollDelay: rollDelay,
}
return s.attemptRUCreation(u, rollLabels, renewalErrCh)
}
开发者ID:petertseng,项目名称:p2,代码行数:99,代码来源:consul_store.go
注:本文中的github.com/square/p2/pkg/kp.Session类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论