本文整理汇总了Golang中github.com/youtube/vitess/go/relog.Warning函数的典型用法代码示例。如果您正苦于以下问题:Golang Warning函数的具体用法?Golang Warning怎么用?Golang Warning使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了Warning函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: EnableUpdateStreamService
func EnableUpdateStreamService(tabletType string, dbcfgs dbconfigs.DBConfigs) {
defer logError()
UpdateStreamRpcService.actionLock.Lock()
defer UpdateStreamRpcService.actionLock.Unlock()
if !dbcfgsCorrect(tabletType, dbcfgs) {
relog.Warning("missing/incomplete db configs file, cannot enable update stream service")
return
}
if UpdateStreamRpcService.mycnf.BinLogPath == "" {
relog.Warning("Update stream service requires binlogs enabled")
return
}
if UpdateStreamRpcService.isServiceEnabled() {
relog.Warning("Update stream service is already enabled")
return
}
UpdateStreamRpcService.setState(ENABLED)
UpdateStreamRpcService.mysqld = NewMysqld(UpdateStreamRpcService.mycnf, dbcfgs.Dba, dbcfgs.Repl)
UpdateStreamRpcService.dbname = dbcfgs.App.Dbname
relog.Info("dbcfgs.App.Dbname %v DbName %v", dbcfgs.App.Dbname, UpdateStreamRpcService.dbname)
relog.Info("mycnf.BinLogPath %v mycnf.RelayLogPath %v", UpdateStreamRpcService.mycnf.BinLogPath, UpdateStreamRpcService.mycnf.RelayLogPath)
UpdateStreamRpcService.tabletType = tabletType
UpdateStreamRpcService.binlogPrefix = UpdateStreamRpcService.mycnf.BinLogPath
UpdateStreamRpcService.logsDir = path.Dir(UpdateStreamRpcService.binlogPrefix)
relog.Info("Update Stream enabled, logsDir %v", UpdateStreamRpcService.logsDir)
}
开发者ID:Eric-Chen,项目名称:vitess,代码行数:32,代码来源:updatestreamctl.go
示例2: ActionEventLoop
func (zkts *Server) ActionEventLoop(tabletAlias topo.TabletAlias, dispatchAction func(actionPath, data string) error, done chan struct{}) {
for {
// Process any pending actions when we startup, before we start listening
// for events.
watch, err := zkts.handleActionQueue(tabletAlias, dispatchAction)
if err != nil {
relog.Warning("action queue failed: %v", err)
time.Sleep(5 * time.Second)
continue
}
// FIXME(msolomon) Add a skewing timer here to guarantee we wakeup
// periodically even if events are missed?
select {
case event := <-watch:
if !event.Ok() {
// NOTE(msolomon) The zk meta conn will reconnect automatically, or
// error out. At this point, there isn't much to do.
relog.Warning("zookeeper not OK: %v", event)
time.Sleep(5 * time.Second)
}
// Otherwise, just handle the queue above.
case <-done:
return
}
}
}
开发者ID:Eric-Chen,项目名称:vitess,代码行数:27,代码来源:cell.go
示例3: StartRowCacheInvalidation
func StartRowCacheInvalidation() {
if !shouldInvalidatorRun() {
relog.Warning("Row-cache invalidator not being enabled, criteria not met")
CacheInvalidationProcessor.stopRowCacheInvalidation()
return
}
if CacheInvalidationProcessor.isServiceEnabled() {
relog.Warning("Row-cache invalidator service is already enabled")
return
}
CacheInvalidationProcessor.stateLock.Lock()
if shouldInvalidatorRun() {
CacheInvalidationProcessor.setState(ENABLED)
CacheInvalidationProcessor.stateLock.Unlock()
} else {
CacheInvalidationProcessor.setState(DISABLED)
CacheInvalidationProcessor.stateLock.Unlock()
return
}
relog.Info("Starting RowCacheInvalidation Service")
CacheInvalidationProcessor.runInvalidationLoop()
}
开发者ID:shrutip,项目名称:vitess,代码行数:25,代码来源:rowcache_invalidator.go
示例4: getActions
func getActions(zconn zk.Conn, actionPath string) ([]*tm.ActionNode, error) {
actions, _, err := zconn.Children(actionPath)
if err != nil {
return nil, fmt.Errorf("getActions failed: %v %v", actionPath, err)
}
sort.Strings(actions)
wg := sync.WaitGroup{}
mu := sync.Mutex{}
nodes := make([]*tm.ActionNode, 0, len(actions))
for _, action := range actions {
wg.Add(1)
go func(action string) {
defer wg.Done()
actionNodePath := path.Join(actionPath, action)
data, _, err := zconn.Get(actionNodePath)
if err != nil && !zookeeper.IsError(err, zookeeper.ZNONODE) {
relog.Warning("getActions: %v %v", actionNodePath, err)
return
}
actionNode, err := tm.ActionNodeFromJson(data, actionNodePath)
if err != nil {
relog.Warning("getActions: %v %v", actionNodePath, err)
return
}
mu.Lock()
nodes = append(nodes, actionNode)
mu.Unlock()
}(action)
}
wg.Wait()
return nodes, nil
}
开发者ID:Eric-Chen,项目名称:vitess,代码行数:33,代码来源:plugin_zktopo.go
示例5: stopCache
func (rowCache *InvalidationProcessor) stopCache(reason string) {
relog.Warning("Stopping rowcache invalidation, reason: '%v'", reason)
rowCache.stopRowCacheInvalidation()
if IsCachePoolAvailable() {
relog.Warning("Disallowing Query Service as row-cache invalidator cannot run")
DisallowQueries(false)
}
}
开发者ID:shrutip,项目名称:vitess,代码行数:8,代码来源:rowcache_invalidator.go
示例6: refreshSomeValues
// return a few values that need to be refreshed
func (zkc *ZkCache) refreshSomeValues(zconn zk.Conn, maxToRefresh int) {
// build a list of a few values we want to refresh
refreshThreshold := time.Now().Add(-10 * time.Minute)
// range will randomize the traversal order, so we will not always try
// the same entries in the same order
dataEntries := make([]*zkCacheEntry, 0, maxToRefresh)
childrenEntries := make([]*zkCacheEntry, 0, maxToRefresh)
zkc.mutex.Lock()
for _, entry := range zkc.Cache {
shouldBeDataRefreshed, shouldBeChildrenRefreshed := entry.checkForRefresh(refreshThreshold)
if shouldBeDataRefreshed {
dataEntries = append(dataEntries, entry)
}
if shouldBeChildrenRefreshed {
childrenEntries = append(childrenEntries, entry)
}
// check if we have enough work to do
if len(dataEntries) == maxToRefresh || len(childrenEntries) == maxToRefresh {
break
}
}
zkc.mutex.Unlock()
// now refresh the values
for _, entry := range dataEntries {
data, stat, watch, err := zconn.GetW(entry.node.Path)
if err == nil {
zkStat := &zk.ZkStat{}
zkStat.FromZookeeperStat(stat)
entry.updateData(data, zkStat, watch)
} else if zookeeper.IsError(err, zookeeper.ZCLOSING) {
// connection is closing, no point in asking for more
relog.Warning("failed to refresh cache: %v (and stopping refresh)", err.Error())
return
} else {
// individual failure
relog.Warning("failed to refresh cache: %v", err.Error())
}
}
for _, entry := range childrenEntries {
children, stat, watch, err := zconn.ChildrenW(entry.node.Path)
if err == nil {
zkStat := &zk.ZkStat{}
zkStat.FromZookeeperStat(stat)
entry.updateChildren(children, zkStat, watch)
} else if zookeeper.IsError(err, zookeeper.ZCLOSING) {
// connection is closing, no point in asking for more
relog.Warning("failed to refresh cache: %v (and stopping refresh)", err.Error())
return
} else {
// individual failure
relog.Warning("failed to refresh cache: %v", err.Error())
}
}
}
开发者ID:Eric-Chen,项目名称:vitess,代码行数:59,代码来源:cache.go
示例7: WaitForTabletAction
func (zkts *Server) WaitForTabletAction(actionPath string, waitTime time.Duration, interrupted chan struct{}) (string, error) {
timer := time.NewTimer(waitTime)
defer timer.Stop()
// see if the file exists or sets a watch
// the loop is to resist zk disconnects while we're waiting
actionLogPath := strings.Replace(actionPath, "/action/", "/actionlog/", 1)
wait:
for {
var retryDelay <-chan time.Time
stat, watch, err := zkts.zconn.ExistsW(actionLogPath)
if err != nil {
delay := 5*time.Second + time.Duration(rand.Int63n(55e9))
relog.Warning("unexpected zk error, delay retry %v: %v", delay, err)
// No one likes a thundering herd.
retryDelay = time.After(delay)
} else if stat != nil {
// file exists, go on
break wait
}
// if the file doesn't exist yet, wait for creation event.
// On any other event we'll retry the ExistsW
select {
case actionEvent := <-watch:
if actionEvent.Type == zookeeper.EVENT_CREATED {
break wait
} else {
// Log unexpected events. Reconnects are
// handled by zk.Conn, so calling ExistsW again
// will handle a disconnect.
relog.Warning("unexpected zk event: %v", actionEvent)
}
case <-retryDelay:
continue wait
case <-timer.C:
return "", topo.ErrTimeout
case <-interrupted:
return "", topo.ErrInterrupted
}
}
// the node exists, read it
data, _, err := zkts.zconn.Get(actionLogPath)
if err != nil {
return "", fmt.Errorf("action err: %v %v", actionLogPath, err)
}
return data, nil
}
开发者ID:Eric-Chen,项目名称:vitess,代码行数:50,代码来源:cell.go
示例8: compareRow
func (qe *QueryEngine) compareRow(logStats *sqlQueryStats, plan *CompiledPlan, cacheRow []sqltypes.Value, pk []sqltypes.Value) (dbrow []sqltypes.Value) {
rowsAreEquql := func(row1, row2 []sqltypes.Value) bool {
if len(row1) != len(row2) {
return false
}
for i := 0; i < len(row1); i++ {
if row1[i].IsNull() && row2[i].IsNull() {
continue
}
if (row1[i].IsNull() && !row2[i].IsNull()) || (!row1[i].IsNull() && row2[i].IsNull()) || row1[i].String() != row2[i].String() {
return false
}
}
return true
}
reloadFromCache := func(pk []sqltypes.Value) (newRow []sqltypes.Value) {
keys := make([]string, 1)
keys[0] = buildKey(pk)
rcresults := plan.TableInfo.Cache.Get(keys)
if len(rcresults) == 0 {
return nil
}
return rcresults[keys[0]].Row
}
resultFromdb := qe.qFetch(logStats, plan, plan.OuterQuery, pk)
if len(resultFromdb.Rows) == 0 {
// Reload from cache for verification
if reloadFromCache(pk) == nil {
return nil
}
relog.Warning("unexpected number of rows for %v", pk)
errorStats.Add("Mismatch", 1)
return nil
}
dbrow = resultFromdb.Rows[0]
if !rowsAreEquql(cacheRow, dbrow) {
// Reload from cache for verification
newRow := reloadFromCache(pk)
if newRow == nil {
return
}
if !rowsAreEquql(newRow, dbrow) {
relog.Warning("query: %v", plan.FullQuery)
relog.Warning("mismatch for: %v, cache: %v, db: %v", pk, newRow, dbrow)
errorStats.Add("Mismatch", 1)
}
}
return dbrow
}
开发者ID:Eric-Chen,项目名称:vitess,代码行数:50,代码来源:query_engine.go
示例9: lockForAction
// lockForAction creates the action node in zookeeper, waits for the
// queue lock, displays a nice error message if it cant get it
func (zkts *Server) lockForAction(actionDir, contents string, timeout time.Duration, interrupted chan struct{}) (string, error) {
// create the action path
actionPath, err := zkts.zconn.Create(actionDir, contents, zookeeper.SEQUENCE, zookeeper.WorldACL(zookeeper.PERM_ALL))
if err != nil {
return "", err
}
err = zk.ObtainQueueLock(zkts.zconn, actionPath, timeout, interrupted)
if err != nil {
var errToReturn error
switch err {
case zk.ErrInterrupted:
errToReturn = topo.ErrInterrupted
case zk.ErrTimeout:
errToReturn = topo.ErrTimeout
default:
errToReturn = fmt.Errorf("failed to obtain action lock: %v %v", actionPath, err)
}
// Regardless of the reason, try to cleanup.
relog.Warning("Failed to obtain action lock: %v", err)
zkts.zconn.Delete(actionPath, -1)
// Show the other actions in the directory
dir := path.Dir(actionPath)
children, _, err := zkts.zconn.Children(dir)
if err != nil {
relog.Warning("Failed to get children of %v: %v", dir, err)
return "", errToReturn
}
if len(children) == 0 {
relog.Warning("No other action running, you may just try again now.")
return "", errToReturn
}
childPath := path.Join(dir, children[0])
data, _, err := zkts.zconn.Get(childPath)
if err != nil {
relog.Warning("Failed to get first action node %v (may have just ended): %v", childPath, err)
return "", errToReturn
}
relog.Warning("------ Most likely blocking action: %v\n%v", childPath, data)
return "", errToReturn
}
return actionPath, nil
}
开发者ID:Eric-Chen,项目名称:vitess,代码行数:51,代码来源:global.go
示例10: execAnalyzeDelete
func (node *Node) execAnalyzeDelete(getTable TableGetter) (plan *ExecPlan) {
// Default plan
plan = &ExecPlan{PlanId: PLAN_PASS_DML, FullQuery: node.GenerateFullQuery()}
tableName := string(node.At(DELETE_TABLE_OFFSET).Value)
tableInfo := plan.setTableInfo(tableName, getTable)
if len(tableInfo.Indexes) == 0 || tableInfo.Indexes[0].Name != "PRIMARY" {
relog.Warning("no primary key for table %s", tableName)
plan.Reason = REASON_TABLE_NOINDEX
return plan
}
plan.PlanId = PLAN_DML_SUBQUERY
plan.OuterQuery = node.GenerateDeleteOuterQuery(tableInfo.Indexes[0])
plan.Subquery = node.GenerateDeleteSubquery(tableInfo)
conditions := node.At(DELETE_WHERE_OFFSET).execAnalyzeWhere()
if conditions == nil {
plan.Reason = REASON_WHERE
return plan
}
if pkValues := getPKValues(conditions, tableInfo.Indexes[0]); pkValues != nil {
plan.PlanId = PLAN_DML_PK
plan.OuterQuery = plan.FullQuery
plan.PKValues = pkValues
return plan
}
return plan
}
开发者ID:Eric-Chen,项目名称:vitess,代码行数:32,代码来源:execution.go
示例11: FmtBindVariables
// FmtBindVariables returns the map of bind variables as JSON. For
// values that are strings or byte slices it only reports their type
// and length.
func (stats *sqlQueryStats) FmtBindVariables(full bool) string {
var out map[string]interface{}
if full {
out = stats.BindVariables
} else {
// NOTE(szopa): I am getting rid of potentially large bind
// variables.
out := make(map[string]interface{})
for k, v := range stats.BindVariables {
switch val := v.(type) {
case string:
out[k] = fmt.Sprintf("string %v", len(val))
case []byte:
out[k] = fmt.Sprintf("bytes %v", len(val))
default:
out[k] = v
}
}
}
b, err := json.Marshal(out)
if err != nil {
relog.Warning("could not marshal %q", stats.BindVariables)
return ""
}
return string(b)
}
开发者ID:Eric-Chen,项目名称:vitess,代码行数:29,代码来源:streamlogger.go
示例12: ServeUpdateStream
func (updateStream *UpdateStream) ServeUpdateStream(req *UpdateStreamRequest, sendReply SendUpdateStreamResponse) error {
defer func() {
if x := recover(); x != nil {
//Send the error to the client.
//panic(x)
SendError(sendReply, x.(error), nil)
}
}()
if !updateStream.isServiceEnabled() {
relog.Warning("Unable to serve client request: Update stream service is not enabled yet")
return fmt.Errorf("Update stream service is not enabled yet")
}
if !IsStartPositionValid(&req.StartPosition) {
return fmt.Errorf("Invalid start position, cannot serve the stream")
}
relog.Info("ServeUpdateStream starting @ %v", req.StartPosition.String())
startCoordinates := &req.StartPosition.Position
blp := NewBlp(startCoordinates, updateStream)
//locate the relay filename and position based on the masterPosition map
if !IsMasterPositionValid(startCoordinates) {
return fmt.Errorf("Invalid start position %v", req.StartPosition)
}
updateStream.actionLock.Lock()
updateStream.stateWaitGroup.Add(1)
updateStream.actionLock.Unlock()
defer updateStream.clientDone()
blp.StreamBinlog(sendReply, updateStream.binlogPrefix)
return nil
}
开发者ID:Eric-Chen,项目名称:vitess,代码行数:35,代码来源:updatestreamctl.go
示例13: dispatchAction
// A non-nil return signals that event processing should stop.
func (agent *ActionAgent) dispatchAction(actionPath, data string) error {
relog.Info("action dispatch %v", actionPath)
actionNode, err := ActionNodeFromJson(data, actionPath)
if err != nil {
relog.Error("action decode failed: %v %v", actionPath, err)
return nil
}
logfile := flag.Lookup("logfile").Value.String()
if !strings.HasPrefix(logfile, "/dev") {
logfile = path.Join(path.Dir(logfile), "vtaction.log")
}
cmd := []string{
agent.vtActionBinFile,
"-action", actionNode.Action,
"-action-node", actionPath,
"-action-guid", actionNode.ActionGuid,
"-mycnf-file", agent.MycnfFile,
"-logfile", logfile,
}
cmd = append(cmd, agent.ts.GetSubprocessFlags()...)
if agent.DbConfigsFile != "" {
cmd = append(cmd, "-db-configs-file", agent.DbConfigsFile)
}
if agent.DbCredentialsFile != "" {
cmd = append(cmd, "-db-credentials-file", agent.DbCredentialsFile)
}
relog.Info("action launch %v", cmd)
vtActionCmd := exec.Command(cmd[0], cmd[1:]...)
stdOut, vtActionErr := vtActionCmd.CombinedOutput()
if vtActionErr != nil {
relog.Error("agent action failed: %v %v\n%s", actionPath, vtActionErr, stdOut)
// If the action failed, preserve single execution path semantics.
return vtActionErr
}
relog.Info("agent action completed %v %s", actionPath, stdOut)
// Save the old tablet so callbacks can have a better idea of the precise
// nature of the transition.
oldTablet := agent.Tablet().Tablet
// Actions should have side effects on the tablet, so reload the data.
if err := agent.readTablet(); err != nil {
relog.Warning("failed rereading tablet after action - services may be inconsistent: %v %v", actionPath, err)
} else {
agent.runChangeCallbacks(oldTablet, actionPath)
}
// Maybe invalidate the schema.
// This adds a dependency between tabletmanager and tabletserver,
// so it's not ideal. But I (alainjobart) think it's better
// to have up to date schema in vtocc.
if actionNode.Action == TABLET_ACTION_APPLY_SCHEMA {
tabletserver.ReloadSchema()
}
return nil
}
开发者ID:Eric-Chen,项目名称:vitess,代码行数:61,代码来源:agent.go
示例14: getInsertPKValues
func getInsertPKValues(pkColumnNumbers []int, rowList *Node, tableInfo *schema.Table) (pkValues []interface{}) {
pkValues = make([]interface{}, len(pkColumnNumbers))
for index, columnNumber := range pkColumnNumbers {
if columnNumber == -1 {
pkValues[index] = tableInfo.GetPKColumn(index).Default
continue
}
values := make([]interface{}, rowList.Len())
for j := 0; j < rowList.Len(); j++ {
if columnNumber >= rowList.At(j).At(0).Len() { // NODE_LIST->'('->NODE_LIST
panic(NewParserError("Column count doesn't match value count"))
}
node := rowList.At(j).At(0).At(columnNumber) // NODE_LIST->'('->NODE_LIST->Value
value := node.execAnalyzeValue()
if value == nil {
relog.Warning("insert is too complex %v", node)
return nil
}
values[j] = asInterface(value)
}
if len(values) == 1 {
pkValues[index] = values[0]
} else {
pkValues[index] = values
}
}
return pkValues
}
开发者ID:Eric-Chen,项目名称:vitess,代码行数:28,代码来源:execution.go
示例15: SnapshotSourceEnd
func (mysqld *Mysqld) SnapshotSourceEnd(slaveStartRequired, readOnly, deleteSnapshot bool) error {
if deleteSnapshot {
// clean out our files
relog.Info("removing snapshot links: %v", mysqld.SnapshotDir)
if err := os.RemoveAll(mysqld.SnapshotDir); err != nil {
relog.Warning("failed to remove old snapshot: %v", err)
return err
}
}
// Try to restart mysqld
if err := Start(mysqld, MysqlWaitTime); err != nil {
return err
}
// Restore original mysqld state that we saved above.
if slaveStartRequired {
if err := mysqld.StartSlave(); err != nil {
return err
}
// this should be quick, but we might as well just wait
if err := mysqld.WaitForSlaveStart(SlaveStartDeadline); err != nil {
return err
}
}
// And set read-only mode
if err := mysqld.SetReadOnly(readOnly); err != nil {
return err
}
return nil
}
开发者ID:Eric-Chen,项目名称:vitess,代码行数:34,代码来源:clone.go
示例16: GetTabletMap
// If error is not nil, the results in the dictionary are incomplete.
func GetTabletMap(ts topo.Server, tabletAliases []topo.TabletAlias) (map[topo.TabletAlias]*topo.TabletInfo, error) {
wg := sync.WaitGroup{}
mutex := sync.Mutex{}
tabletMap := make(map[topo.TabletAlias]*topo.TabletInfo)
var someError error
for _, tabletAlias := range tabletAliases {
wg.Add(1)
go func(tabletAlias topo.TabletAlias) {
defer wg.Done()
tabletInfo, err := ts.GetTablet(tabletAlias)
mutex.Lock()
if err != nil {
relog.Warning("%v: %v", tabletAlias, err)
// There can be data races removing nodes - ignore them for now.
if err != topo.ErrNoNode {
someError = err
}
} else {
tabletMap[tabletAlias] = tabletInfo
}
mutex.Unlock()
}(tabletAlias)
}
wg.Wait()
return tabletMap, someError
}
开发者ID:Eric-Chen,项目名称:vitess,代码行数:29,代码来源:utils.go
示例17: getPKValues
func getPKValues(conditions []*Node, pkIndex *schema.Index) (pkValues []interface{}) {
if pkIndex.Name != "PRIMARY" {
relog.Warning("Table has no primary key")
return nil
}
pkIndexScore := NewIndexScore(pkIndex)
pkValues = make([]interface{}, len(pkIndexScore.ColumnMatch))
for _, condition := range conditions {
if condition.Type != '=' && condition.Type != IN {
return nil
}
index := pkIndexScore.FindMatch(string(condition.At(0).Value))
if index == -1 {
return nil
}
switch condition.Type {
case '=':
pkValues[index] = asInterface(condition.At(1))
case IN:
pkValues[index], _ = condition.At(1).At(0).parseList()
}
}
if pkIndexScore.GetScore() == PERFECT_SCORE {
return pkValues
}
return nil
}
开发者ID:Eric-Chen,项目名称:vitess,代码行数:27,代码来源:execution.go
示例18: GetAllTablets
// Return a sorted list of tablets.
func GetAllTablets(ts topo.Server, cell string) ([]*topo.TabletInfo, error) {
aliases, err := ts.GetTabletsByCell(cell)
if err != nil {
return nil, err
}
sort.Sort(topo.TabletAliasList(aliases))
tabletMap, err := GetTabletMap(ts, aliases)
if err != nil {
// we got another error than ZNONODE
return nil, err
}
tablets := make([]*topo.TabletInfo, 0, len(aliases))
for _, tabletAlias := range aliases {
tabletInfo, ok := tabletMap[tabletAlias]
if !ok {
// tablet disappeared on us (GetTabletMap ignores
// ZNONODE), just echo a warning
relog.Warning("failed to load tablet %v", tabletAlias)
} else {
tablets = append(tablets, tabletInfo)
}
}
return tablets, nil
}
开发者ID:Eric-Chen,项目名称:vitess,代码行数:27,代码来源:utils.go
示例19: CopyKeyspaces
// CopyKeyspaces will create the keyspaces in the destination topo
func CopyKeyspaces(fromTS, toTS topo.Server) {
keyspaces, err := fromTS.GetKeyspaces()
if err != nil {
relog.Fatal("fromTS.GetKeyspaces failed: %v", err)
}
wg := sync.WaitGroup{}
rec := concurrency.AllErrorRecorder{}
for _, keyspace := range keyspaces {
wg.Add(1)
go func(keyspace string) {
defer wg.Done()
if err := toTS.CreateKeyspace(keyspace); err != nil {
if err == topo.ErrNodeExists {
relog.Warning("keyspace %v already exists", keyspace)
} else {
rec.RecordError(err)
}
}
}(keyspace)
}
wg.Wait()
if rec.HasErrors() {
relog.Fatal("copyKeyspaces failed: %v", rec.Error())
}
}
开发者ID:shrutip,项目名称:vitess,代码行数:27,代码来源:copy.go
示例20: copyBufN
func copyBufN(dst io.Writer, src io.Reader, totalLen int64, buf []byte) (written int64, err error) {
for written < totalLen {
toBeRead := totalLen
if diffLen := totalLen - written; diffLen < toBeRead {
toBeRead = diffLen
}
nr, er := src.Read(buf[0:toBeRead])
if nr > 0 {
nw, ew := dst.Write(buf[0:nr])
if nw > 0 {
written += int64(nw)
}
if ew != nil {
err = ew
break
}
if nr != nw {
relog.Warning("Short write to dst")
err = io.ErrShortWrite
break
}
}
if er != nil {
err = er
break
}
}
return written, err
}
开发者ID:Eric-Chen,项目名称:vitess,代码行数:29,代码来源:binlog_reader.go
注:本文中的github.com/youtube/vitess/go/relog.Warning函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论