本文整理汇总了Golang中github.com/couchbase/sync_gateway/channels.TimedSet.String方法的典型用法代码示例。如果您正苦于以下问题:Golang TimedSet.String方法的具体用法?Golang TimedSet.String怎么用?Golang TimedSet.String使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/couchbase/sync_gateway/channels.TimedSet
的用法示例。
在下文中一共展示了TimedSet.String方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: VectorMultiChangesFeed
// Returns the (ordered) union of all of the changes made to multiple channels.
func (db *Database) VectorMultiChangesFeed(chans base.Set, options ChangesOptions) (<-chan *ChangeEntry, error) {
to := ""
var userVbNo uint16
if db.user != nil && db.user.Name() != "" {
to = fmt.Sprintf(" (to %s)", db.user.Name())
userVbNo = uint16(db.Bucket.VBHash(db.user.DocID()))
}
base.LogTo("Changes+", "Vector MultiChangesFeed(%s, %+v) ... %s", chans, options, to)
output := make(chan *ChangeEntry, 50)
go func() {
var cumulativeClock *base.SyncSequenceClock
var lastHashedValue string
hashedEntryCount := 0
defer func() {
base.LogTo("Changes+", "MultiChangesFeed done %s", to)
close(output)
}()
var changeWaiter *changeWaiter
var userCounter uint64 // Wait counter used to identify changes to the user document
var addedChannels base.Set // Tracks channels added to the user during changes processing.
var userChanged bool // Whether the user document has changed
// Restrict to available channels, expand wild-card, and find since when these channels
// have been available to the user:
var channelsSince channels.TimedSet
if db.user != nil {
channelsSince = db.user.FilterToAvailableChannels(chans)
} else {
channelsSince = channels.AtSequence(chans, 0)
}
if options.Wait {
changeWaiter = db.startChangeWaiter(channelsSince.AsSet())
userCounter = changeWaiter.CurrentUserCount()
db.initializePrincipalPolling(changeWaiter.GetUserKeys())
}
cumulativeClock = base.NewSyncSequenceClock()
cumulativeClock.SetTo(getChangesClock(options.Since))
// This loop is used to re-run the fetch after every database change, in Wait mode
outer:
for {
// Get the last polled stable sequence. We don't return anything later than stable sequence in each iteration
stableClock, err := db.changeCache.GetStableClock(true)
if err != nil {
base.Warn("MultiChangesFeed got error reading stable sequence: %v", err)
return
}
// Updates the changeWaiter to the current set of available channels.
if changeWaiter != nil {
changeWaiter.UpdateChannels(channelsSince)
}
base.LogTo("Changes+", "MultiChangesFeed: channels expand to %#v ... %s", channelsSince.String(), to)
// Build the channel feeds.
feeds, err := db.initializeChannelFeeds(channelsSince, options, addedChannels, userVbNo)
if err != nil {
return
}
// This loop reads the available entries from all the feeds in parallel, merges them,
// and writes them to the output channel:
current := make([]*ChangeEntry, len(feeds))
var sentSomething bool
nextEntry := getNextSequenceFromFeeds(current, feeds)
for {
minEntry := nextEntry
if minEntry == nil {
break // Exit the loop when there are no more entries
}
// Calculate next entry here, to help identify whether minEntry is the last entry we're sending,
// to guarantee hashing
nextEntry = getNextSequenceFromFeeds(current, feeds)
if options.ActiveOnly {
if minEntry.Deleted || minEntry.allRemoved {
continue
}
}
// Don't send any entries later than the stable sequence
if stableClock.GetSequence(minEntry.Seq.vbNo) < minEntry.Seq.Seq {
continue
}
// Add the doc body or the conflicting rev IDs, if those options are set:
if options.IncludeDocs || options.Conflicts {
db.addDocToChangeEntry(minEntry, options)
}
// Clock handling
if minEntry.Seq.TriggeredBy == 0 {
//.........这里部分代码省略.........