当前位置: 首页>>代码示例>>Golang>>正文


Golang Entries.Diff方法代码示例

本文整理汇总了Golang中github.com/docker/swarm/discovery.Entries.Diff方法的典型用法代码示例。如果您正苦于以下问题:Golang Entries.Diff方法的具体用法?Golang Entries.Diff怎么用?Golang Entries.Diff使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在github.com/docker/swarm/discovery.Entries的用法示例。


在下文中一共展示了Entries.Diff方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。

示例1: monitorDiscovery

// Entries are Docker Engines
func (c *Cluster) monitorDiscovery(ch <-chan discovery.Entries, errCh <-chan error) {
	// Watch changes on the discovery channel.
	currentEntries := discovery.Entries{}
	for {
		select {
		case entries := <-ch:
			added, removed := currentEntries.Diff(entries)
			currentEntries = entries

			// Remove engines first. `addEngine` will refuse to add an engine
			// if there's already an engine with the same ID.  If an engine
			// changes address, we have to first remove it then add it back.
			for _, entry := range removed {
				c.removeEngine(entry.String())
			}

			// Since `addEngine` can be very slow (it has to connect to the
			// engine), we are going to do the adds in parallel.
			for _, entry := range added {
				go c.addEngine(entry.String())
			}
		case err := <-errCh:
			log.Errorf("Discovery error: %v", err)
		}
	}
}
开发者ID:lhdomenech,项目名称:swarm,代码行数:27,代码来源:cluster.go

示例2: newDiscoveryEndpoint

// Create a new endpoint
func newDiscoveryEndpoint(url, localAddr string, discPort string, weaveCli *WeaveClient, heartbeat time.Duration, ttl time.Duration) (*discoveryEndpoint, error) {
	d, err := discovery.New(url, heartbeat, ttl)
	if err != nil {
		return nil, err
	}
	stopChan := make(chan struct{})
	ep := discoveryEndpoint{
		Discovery: d,
		url:       url,
		stopChan:  stopChan,
	}

	register := func() {}
	var localAddrHost, localAddrPort string
	if len(localAddr) > 0 {
		localAddrHost, localAddrPort, err = net.SplitHostPort(localAddr)
		if err != nil {
			Log.Warningf("[manager] Invalid local address '%s': %s", localAddr, err)
			return nil, err
		}

		register = func() {
			Log.Debugf("[manager] Registering on '%s' we are at '%s' (%s period)...", url, localAddr, heartbeat)
			if err := d.Register(localAddr); err != nil {
				Log.Warningf("[manager] Registration failed: %s", err)
			} else {
				ep.lastRegister = time.Now()
			}
		}
	}

	hostAndPort := func(e *discovery.Entry) (string, string, bool) {
		host := e.Host
		port := e.Port
		if len(discPort) > 0 {
			port = discPort
		}
		return host, port, (host == localAddrHost && port == localAddrPort)
	}

	entriesChan, errorsChan := d.Watch(stopChan)
	ticker := time.NewTicker(heartbeat)
	go func() {
		register()
		currentEntries := discovery.Entries{}
		for {
			select {
			case reportedEntries := <-entriesChan:
				added, removed := currentEntries.Diff(reportedEntries)

				ep.added += uint64(len(added))
				ep.removed += uint64(len(removed))

				currentEntries = reportedEntries
				Log.Printf("[manager] Updates from '%s': %d added, %d removed...", url, len(added), len(removed))
				for _, e := range added {
					if host, port, isLocal := hostAndPort(e); !isLocal {
						weaveCli.Join(host, port)
					}
				}
				for _, e := range removed {
					if host, port, isLocal := hostAndPort(e); !isLocal {
						weaveCli.Forget(host, port)
					}
				}
			case reportedError := <-errorsChan:
				Log.Warningf("[manager] Error from endpoint %s: %s...", url, reportedError)
			case <-ticker.C:
				register()
			case <-stopChan:
				ticker.Stop()
				return
			}
		}
	}()

	return &ep, nil
}
开发者ID:bboreham,项目名称:discovery,代码行数:79,代码来源:manager.go


注:本文中的github.com/docker/swarm/discovery.Entries.Diff方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。