Skip to content

Commit

Permalink
*: add stat interface and corresponding implememtation
Browse files Browse the repository at this point in the history
  • Loading branch information
zimulala committed Nov 16, 2015
1 parent 45f91fd commit 0ddf6eb
Show file tree
Hide file tree
Showing 4 changed files with 107 additions and 424 deletions.
6 changes: 4 additions & 2 deletions ddl/ddl.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,9 @@ type DDL interface {
// all servers have the same lease time.
SetLease(lease time.Duration)
// Stat returns the DDL statistics.
Stat() (map[string]interface{}, error)
Stat() (map[string]*variable.StatusVal, error)
// GetDefaultStatusScopes gets default status variables scope.
GetDefaultStatusScopes() map[string]variable.ScopeFlag
}

type ddl struct {
Expand Down Expand Up @@ -108,7 +110,7 @@ func newDDL(store kv.Storage, infoHandle *infoschema.Handle, hook Callback, leas

d.start()

variables.RegisterStatist(d)
variable.RegisterStatist(d)

return d
}
Expand Down
85 changes: 40 additions & 45 deletions ddl/stat.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,39 +39,31 @@ var (
ddl_job_args = "ddl_job_args"
)

var defaultStatusVars map[string]variables.ScopeFlag = map[string]variables.ScopeFlag{
{ScopeGlobal | ScopeSession, ddl_server_id},
{ScopeGlobal | ScopeSession, ddl_schema_version},
{ScopeGlobal | ScopeSession, ddl_owner_id},
{ScopeGlobal | ScopeSession, ddl_owner_last_update_ts},
{ScopeGlobal | ScopeSession, ddl_job_id},
{ScopeGlobal | ScopeSession, ddl_job_action},
{ScopeGlobal | ScopeSession, ddl_job_last_update_ts},
{ScopeGlobal | ScopeSession, ddl_job_state},
{ScopeGlobal | ScopeSession, ddl_job_error},
{ScopeGlobal | ScopeSession, ddl_job_schema_state},
{ScopeGlobal | ScopeSession, ddl_job_schema_id},
{ScopeGlobal | ScopeSession, ddl_job_table_id},
{ScopeGlobal | ScopeSession, ddl_job_snapshot_ver},
{ScopeGlobal | ScopeSession, ddl_job_reorg_handle},
{ScopeGlobal | ScopeSession, ddl_job_args},
{ScopeGlobal | ScopeSession, ddl_last_reload_schema_ts},
var defaultStatusScopes map[string]variable.ScopeFlag = map[string]variable.ScopeFlag{
ddl_server_id: variable.ScopeGlobal | variable.ScopeSession,
ddl_schema_version: variable.ScopeGlobal | variable.ScopeSession,
ddl_owner_id: variable.ScopeGlobal | variable.ScopeSession,
ddl_owner_last_update_ts: variable.ScopeGlobal | variable.ScopeSession,
ddl_job_id: variable.ScopeGlobal | variable.ScopeSession,
ddl_job_action: variable.ScopeGlobal | variable.ScopeSession,
ddl_job_last_update_ts: variable.ScopeGlobal | variable.ScopeSession,
ddl_job_state: variable.ScopeGlobal | variable.ScopeSession,
ddl_job_error: variable.ScopeGlobal | variable.ScopeSession,
ddl_job_schema_state: variable.ScopeGlobal | variable.ScopeSession,
ddl_job_schema_id: variable.ScopeGlobal | variable.ScopeSession,
ddl_job_table_id: variable.ScopeGlobal | variable.ScopeSession,
ddl_job_snapshot_ver: variable.ScopeGlobal | variable.ScopeSession,
ddl_job_reorg_handle: variable.ScopeGlobal | variable.ScopeSession,
ddl_job_args: variable.ScopeGlobal | variable.ScopeSession,
}

func (d *ddl) SetStatusScope(status string, scope variables.ScopeFlag) {
defaultStatusVars[status] = scope
// GetDefaultStatusScopes gets default status variables scope.
func (d *ddl) GetDefaultStatusScopes() map[string]variable.ScopeFlag {
return defaultStatusScopes
}

func (d *ddl) FillStatusVal(status string, value interface{}) variables.StatusVal {
ok, scope := defaultStatusVars[status]
if !ok {
scope = variables.DefaultScopeFlag
}

return &variables.StatusVal{Scope: scope, Value: value}
}

func (d *ddl) Stat() (map[string]*variables.StatusVal, error) {
// Stat returns the DDL statistics.
func (d *ddl) Stat() (map[string]*variable.StatusVal, error) {
var (
owner *model.Owner
job *model.Job
Expand Down Expand Up @@ -109,29 +101,32 @@ func (d *ddl) Stat() (map[string]*variables.StatusVal, error) {
return nil, errors.Trace(err)
}

m := make(map[string]interface{})
m[ddl_server_id] = d.FillStatusVal(ddl_server_id, d.uuid)
m := make(map[string]*variable.StatusVal)
m[ddl_server_id] = variable.FillStatusVal(ddl_server_id, d.uuid)

m[ddl_schema_version] = d.FillStatusVal(ddl_schema_version, schemaVer)
m[ddl_schema_version] = variable.FillStatusVal(ddl_schema_version, schemaVer)

if owner != nil {
m[ddl_owner_id] = d.FillStatusVal(ddl_owner_id, owner.OwnerID)
m[ddl_owner_id] = variable.FillStatusVal(ddl_owner_id, owner.OwnerID)
// LastUpdateTs uses nanosecond.
m[ddl_owner_last_update_ts] = d.FillStatusVal(ddl_owner_last_update_ts, owner.LastUpdateTS/1e9)
m[ddl_owner_last_update_ts] = variable.FillStatusVal(ddl_owner_last_update_ts, owner.LastUpdateTS/1e9)
}

if job != nil {
m[ddl_job_id] = d.FillStatusVal(ddl_job_id, job.ID)
m[ddl_job_action] = d.FillStatusVal(ddl_job_action, job.Type.String())
m[ddl_job_last_update_ts] = d.FillStatusVal(ddl_job_last_update_ts, job.LastUpdateTS)
m[ddl_job_state] = d.FillStatusVal(ddl_job_state, job.State.String())
m[ddl_job_error] = d.FillStatusVal(ddl_job_error, job.Error)
m[ddl_job_schema_state] = d.FillStatusVal(ddl_job_schema_state, job.SchemaState.String())
m[ddl_job_schema_id] = d.FillStatusVal(ddl_job_schema_id, job.SchemaID)
m[ddl_job_table_id] = d.FillStatusVal(ddl_job_table_id, job.TableID)
m[ddl_job_snapshot_ver] = d.FillStatusVal(ddl_job_snapshot_ver, job.SnapshotVer)
m[ddl_job_reorg_handle] = d.FillStatusVal(ddl_job_reorg_handle, reorgHandle)
m[ddl_job_args] = d.FillStatusVal(ddl_job_args, job.Args)
m[ddl_job_id] = variable.FillStatusVal(ddl_job_id, job.ID)
m[ddl_job_action] = variable.FillStatusVal(ddl_job_action, job.Type.String())
m[ddl_job_last_update_ts] = variable.FillStatusVal(ddl_job_last_update_ts,
job.LastUpdateTS)
m[ddl_job_state] = variable.FillStatusVal(ddl_job_state, job.State.String())
m[ddl_job_error] = variable.FillStatusVal(ddl_job_error, job.Error)
m[ddl_job_schema_state] = variable.FillStatusVal(ddl_job_schema_state,
job.SchemaState.String())
m[ddl_job_schema_id] = variable.FillStatusVal(ddl_job_schema_id, job.SchemaID)
m[ddl_job_table_id] = variable.FillStatusVal(ddl_job_table_id, job.TableID)
m[ddl_job_snapshot_ver] = variable.FillStatusVal(ddl_job_snapshot_ver,
job.SnapshotVer)
m[ddl_job_reorg_handle] = variable.FillStatusVal(ddl_job_reorg_handle, reorgHandle)
m[ddl_job_args] = variable.FillStatusVal(ddl_job_args, job.Args)
}

return m, nil
Expand Down
25 changes: 18 additions & 7 deletions domain/domain.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,15 @@ import (
"github.com/pingcap/tidb/kv"
"github.com/pingcap/tidb/meta"
"github.com/pingcap/tidb/model"
"github.com/pingcap/tidb/sessionctx/variable"
)

var ddl_last_reload_schema_ts = "ddl_last_reload_schema_ts"

var defaultStatusScopes map[string]variable.ScopeFlag = map[string]variable.ScopeFlag{
ddl_last_reload_schema_ts: variable.ScopeGlobal | variable.ScopeSession,
}

// Domain represents a storage space. Different domains can use the same database name.
// Multiple domains can be used in parallel without synchronization.
type Domain struct {
Expand Down Expand Up @@ -104,17 +111,19 @@ func (do *Domain) SetLease(lease time.Duration) {
}

// Stat returns the DDL statistic.
func (do *Domain) Stat() (map[string]interface{}, error) {
m, err := do.ddl.Stat()
if err != nil {
return nil, errors.Trace(err)
}

m["ddl_last_reload_schema_ts"] = atomic.LoadInt64(&do.lastLeaseTS)
func (do *Domain) Stat() (map[string]*variable.StatusVal, error) {
m := make(map[string]*variable.StatusVal)
m["ddl_last_reload_schema_ts"] = variable.FillStatusVal(ddl_last_reload_schema_ts,
atomic.LoadInt64(&do.lastLeaseTS))

return m, nil
}

// GetDefaultStatusScopes gets default status variables scope.
func (do *Domain) GetDefaultStatusScopes() map[string]variable.ScopeFlag {
return defaultStatusScopes
}

func (do *Domain) reload() error {
err := kv.RunInNewTxn(do.store, false, do.loadInfoSchema)
return errors.Trace(err)
Expand Down Expand Up @@ -184,6 +193,8 @@ func NewDomain(store kv.Storage, lease time.Duration) (d *Domain, err error) {
log.Fatalf("load schema err %v", err)
}

variable.RegisterStatist(d)

go d.loadSchemaInLoop(lease)

return d, nil
Expand Down
Loading

0 comments on commit 0ddf6eb

Please sign in to comment.