MCPcopy Create free account
hub / github.com/couchbase/sync_gateway / PostUpgrade

Method PostUpgrade

rest/server_context.go:488–550  ·  view source on GitHub ↗

PostUpgrade performs post-upgrade processing for each database

(ctx context.Context, preview bool)

Source from the content-addressed store, hash-verified

486
487// PostUpgrade performs post-upgrade processing for each database
488func (sc *ServerContext) PostUpgrade(ctx context.Context, preview bool) (postUpgradeResults PostUpgradeResult, err error) {
489 sc._databasesLock.RLock()
490 defer sc._databasesLock.RUnlock()
491
492 var errs *base.MultiError
493 buckets := make(map[string]base.Bucket) // map of bucket name to bucket object
494 dbs := make(map[string]string, len(sc._databases)) // map of db name to bucket name
495 dbDesignDocs := make(map[string][]string, len(sc._databases)) // map of db name to removed design docs
496 bucketInUseIndexes := make(map[string]db.CollectionIndexes) // map of buckets to in use index names
497 bucketRemovedIndexes := make(map[string][]string) // map of bucket name to removed index names
498 for dbName, database := range sc._databases {
499 bucketName := database.Bucket.GetName()
500 dbs[dbName] = bucketName
501 buckets[bucketName] = database.Bucket
502 // View cleanup
503 removedDDocs, err := database.RemoveObsoleteDesignDocs(ctx, preview)
504 if err != nil {
505 errs = errs.Append(fmt.Errorf("Error removing obsolete design docs for database %q: %v", dbName, err))
506 continue
507 }
508 dbDesignDocs[dbName] = removedDDocs
509
510 // Index cleanup
511 inUseIndexes := database.GetInUseIndexes()
512 if _, ok := bucketInUseIndexes[database.Bucket.GetName()]; !ok {
513 bucketInUseIndexes[database.Bucket.GetName()] = make(db.CollectionIndexes)
514 }
515 for dsName, indexes := range inUseIndexes {
516 if _, ok := bucketInUseIndexes[database.Bucket.GetName()][dsName]; !ok {
517 bucketInUseIndexes[database.Bucket.GetName()][dsName] = make(map[string]struct{})
518 }
519 for indexName := range indexes {
520 bucketInUseIndexes[database.Bucket.GetName()][dsName][indexName] = struct{}{}
521 }
522 }
523 }
524
525 for bucketName, indexes := range bucketInUseIndexes {
526 bucket, ok := buckets[bucketName]
527 if !ok {
528 errs = errs.Append(fmt.Errorf("Error getting bucket %q for index cleanup: %v", bucketName, err))
529 continue
530 }
531 if !bucket.IsSupported(sgbucket.BucketStoreFeatureN1ql) {
532 continue
533 }
534 removedIndexes, err := db.RemoveUnusedIndexes(ctx, bucket, indexes, preview)
535 if err != nil {
536 errs = errs.Append(fmt.Errorf("Error removing obsolete indexes for bucket %q: %v", bucketName, err))
537 continue
538 }
539 bucketRemovedIndexes[bucketName] = removedIndexes
540 }
541 postUpgradeResults = make(map[string]PostUpgradeDatabaseResult, len(sc._databases))
542 for dbName, database := range sc._databases {
543 postUpgradeResults[dbName] = PostUpgradeDatabaseResult{
544 RemovedDDocs: dbDesignDocs[dbName],
545 RemovedIndexes: bucketRemovedIndexes[database.Bucket.GetName()],

Callers 1

handlePostUpgradeMethod · 0.80

Calls 10

AppendMethod · 0.95
ErrorOrNilMethod · 0.95
RemoveUnusedIndexesFunction · 0.92
RLockMethod · 0.80
RUnlockMethod · 0.80
ErrorfMethod · 0.80
GetInUseIndexesMethod · 0.80
GetNameMethod · 0.65
IsSupportedMethod · 0.45

Tested by

no test coverage detected