本文整理汇总了Golang中github.com/diffeo/go-coordinate/coordinate.WorkSpecMeta.AvailableCount方法的典型用法代码示例。如果您正苦于以下问题:Golang WorkSpecMeta.AvailableCount方法的具体用法?Golang WorkSpecMeta.AvailableCount怎么用?Golang WorkSpecMeta.AvailableCount使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/diffeo/go-coordinate/coordinate.WorkSpecMeta
的用法示例。
在下文中一共展示了WorkSpecMeta.AvailableCount方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: Meta
func (spec *workSpec) Meta(withCounts bool) (coordinate.WorkSpecMeta, error) {
// If we need counts, we need to run expiry so that the
// available/pending counts are rightish
if withCounts {
spec.Coordinate().Expiry.Do(spec)
}
var meta coordinate.WorkSpecMeta
err := withTx(spec, true, func(tx *sql.Tx) error {
var (
params queryParams
query string
interval string
nextContinuous pq.NullTime
)
query = buildSelect([]string{
workSpecPriority,
workSpecWeight,
workSpecPaused,
workSpecContinuous,
workSpecCanBeContinuous,
workSpecMinMemoryGb,
workSpecInterval,
workSpecNextContinuous,
workSpecMaxRunning,
workSpecMaxAttemptsReturned,
workSpecNextWorkSpec,
workSpecRuntime,
}, []string{
workSpecTable,
}, []string{
isWorkSpec(¶ms, spec.id),
})
row := tx.QueryRow(query, params...)
err := row.Scan(
&meta.Priority,
&meta.Weight,
&meta.Paused,
&meta.Continuous,
&meta.CanBeContinuous,
&meta.MinMemoryGb,
&interval,
&nextContinuous,
&meta.MaxRunning,
&meta.MaxAttemptsReturned,
&meta.NextWorkSpecName,
&meta.Runtime,
)
if err == sql.ErrNoRows {
return coordinate.ErrGone
}
if err != nil {
return err
}
meta.NextContinuous = nullTimeToTime(nextContinuous)
meta.Interval, err = sqlToDuration(interval)
if err != nil {
return err
}
// Find counts with a second query, if requested
if !withCounts {
return nil
}
params = queryParams{}
query = buildSelect([]string{
attemptStatus,
"COUNT(*)",
}, []string{
workUnitAttemptJoin,
}, []string{
workUnitInSpec(¶ms, spec.id),
})
query += " GROUP BY " + attemptStatus
rows, err := tx.Query(query, params...)
if err != nil {
return err
}
return scanRows(rows, func() error {
var status sql.NullString
var count int
err := rows.Scan(&status, &count)
if err != nil {
return err
}
if !status.Valid {
meta.AvailableCount += count
} else {
switch status.String {
case "expired":
meta.AvailableCount += count
case "retryable":
meta.AvailableCount += count
case "pending":
meta.PendingCount += count
}
}
return nil
})
})
return meta, err
//.........这里部分代码省略.........