本文整理汇总了Golang中github.com/funkygao/fae/servant/gen-go/fun/rpc.Context.IsSetSticky方法的典型用法代码示例。如果您正苦于以下问题:Golang Context.IsSetSticky方法的具体用法?Golang Context.IsSetSticky怎么用?Golang Context.IsSetSticky使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/funkygao/fae/servant/gen-go/fun/rpc.Context
的用法示例。
在下文中一共展示了Context.IsSetSticky方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: Lock
func (this *FunServantImpl) Lock(ctx *rpc.Context,
reason string, key string) (r bool, ex error) {
const IDENT = "lock"
svtStats.inc(IDENT)
profiler, err := this.getSession(ctx).startProfiler()
if err != nil {
ex = err
return
}
var peer string
if ctx.IsSetSticky() && *ctx.Sticky {
svtStats.incPeerCall()
r = this.lk.Lock(key)
} else {
svt, err := this.proxy.ServantByKey(key) // FIXME add prefix?
if err != nil {
ex = err
if svt != nil {
if proxy.IsIoError(err) {
svt.Close()
}
svt.Recycle()
}
return
}
if svt == proxy.Self {
r = this.lk.Lock(key)
} else {
svtStats.incCallPeer()
peer = svt.Addr()
svt.HijackContext(ctx)
r, ex = svt.Lock(ctx, reason, key)
if ex != nil {
if proxy.IsIoError(ex) {
svt.Close()
}
}
svt.Recycle()
}
}
profiler.do(IDENT, ctx, "P=%s {reason^%s key^%s} {r^%v}",
peer, reason, key, r)
if !r {
log.Warn("P=%s lock failed: {reason^%s key^%s}", peer, reason, key)
}
return
}
示例2: Unlock
func (this *FunServantImpl) Unlock(ctx *rpc.Context,
reason string, key string) (ex error) {
const IDENT = "unlock"
svtStats.inc(IDENT)
profiler, err := this.getSession(ctx).startProfiler()
if err != nil {
ex = err
return
}
var peer string
if ctx.IsSetSticky() && *ctx.Sticky {
svtStats.incPeerCall()
this.lk.Unlock(key)
} else {
svt, err := this.proxy.ServantByKey(key)
if err != nil {
ex = err
if svt != nil {
if proxy.IsIoError(err) {
svt.Close()
}
svt.Recycle()
}
return
}
if svt == proxy.Self {
this.lk.Unlock(key)
} else {
svtStats.incCallPeer()
peer = svt.Addr()
svt.HijackContext(ctx)
ex = svt.Unlock(ctx, reason, key)
if ex != nil {
if proxy.IsIoError(ex) {
svt.Close()
}
}
svt.Recycle()
}
}
profiler.do(IDENT, ctx, "P=%s {reason^%s key^%s}",
peer, reason, key)
return
}
示例3: MyEvict
func (this *FunServantImpl) MyEvict(ctx *rpc.Context,
cacheKey string) (ex error) {
const IDENT = "my.evict"
svtStats.inc(IDENT)
profiler, err := this.getSession(ctx).startProfiler()
if err != nil {
ex = err
return
}
var peer string
if ctx.IsSetSticky() && *ctx.Sticky {
svtStats.incPeerCall()
this.dbCacheStore.Del(cacheKey)
} else {
svt, err := this.proxy.ServantByKey(cacheKey)
if err != nil {
ex = err
if svt != nil {
if proxy.IsIoError(err) {
svt.Close()
}
svt.Recycle()
}
return
}
if svt == proxy.Self {
this.dbCacheStore.Del(cacheKey)
} else {
svtStats.incCallPeer()
peer = svt.Addr()
svt.HijackContext(ctx)
ex = svt.MyEvict(ctx, cacheKey)
if ex != nil {
if proxy.IsIoError(ex) {
svt.Close()
}
}
svt.Recycle()
}
}
profiler.do(IDENT, ctx, "{key^%s} {p^%s}", cacheKey, peer)
return
}
示例4: MyQuery
func (this *FunServantImpl) MyQuery(ctx *rpc.Context, pool string, table string,
hintId int64, sql string, args []string, cacheKey string) (r *rpc.MysqlResult,
ex error) {
const IDENT = "my.query"
profiler, err := this.getSession(ctx).startProfiler()
if err != nil {
ex = err
return
}
svtStats.inc(IDENT)
var (
cacheKeyHash = cacheKey
peer string
rows int
)
if cacheKey != "" && this.conf.Mysql.CacheKeyHash {
hashSum := sha1.Sum([]byte(cacheKey)) // sha1.Size
cacheKeyHash = string(hashSum[:])
}
if cacheKeyHash == "" {
r, ex = this.doMyQuery(IDENT, ctx, pool, table, hintId,
sql, args, cacheKeyHash)
rows = len(r.Rows)
if r.RowsAffected > 0 {
rows = int(r.RowsAffected)
}
} else {
if ctx.IsSetSticky() && *ctx.Sticky {
svtStats.incPeerCall()
r, ex = this.doMyQuery(IDENT, ctx, pool, table, hintId,
sql, args, cacheKeyHash)
rows = len(r.Rows)
if r.RowsAffected > 0 {
rows = int(r.RowsAffected)
}
} else {
svt, err := this.proxy.ServantByKey(cacheKey)
if err != nil {
ex = err
if svt != nil {
if proxy.IsIoError(err) {
svt.Close()
}
svt.Recycle()
}
return
}
if svt == proxy.Self {
r, ex = this.doMyQuery(IDENT, ctx, pool, table, hintId,
sql, args, cacheKeyHash)
rows = len(r.Rows)
if r.RowsAffected > 0 {
rows = int(r.RowsAffected)
}
} else {
// dispatch to peer
svtStats.incCallPeer()
peer = svt.Addr()
svt.HijackContext(ctx)
r, ex = svt.MyQuery(ctx, pool, table, hintId, sql, args, cacheKey)
if ex != nil {
if proxy.IsIoError(ex) {
svt.Close()
}
} else {
rows = len(r.Rows)
if r.RowsAffected > 0 {
rows = int(r.RowsAffected)
}
}
svt.Recycle() // NEVER forget about this
}
}
}
if ex != nil {
profiler.do(IDENT, ctx,
"P=%s {cache^%s pool^%s table^%s id^%d sql^%s args^%+v} {err^%s}",
peer, cacheKey, pool, table, hintId, sql, args, ex)
} else {
profiler.do(IDENT, ctx,
"P=%s {cache^%s pool^%s table^%s id^%d sql^%s args^%+v} {rows^%d r^%+v}",
peer, cacheKey, pool, table, hintId, sql, args, rows, *r)
}
return
}