From adc0193a94a9e12e8e9489c929d8af3d745717df Mon Sep 17 00:00:00 2001 From: Jack Westwood Date: Wed, 13 Dec 2023 16:45:09 +0000 Subject: [PATCH] GOCBC-1562: Support protostellar collection updating Motivation ---------- We are adding support for collection updating into Stellar Gateway, so we also need to extend the support to the gosdk. Changes ------- Implement UpdateCollecton for protostellar. Change-Id: I310980dda21873ec7f7556f18d5e6ba65837076b Reviewed-on: https://review.couchbase.org/c/gocb/+/201865 Reviewed-by: Charles Dixon Tested-by: Jack Westwood --- collectionsmgmtprovider_ps.go | 37 ++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/collectionsmgmtprovider_ps.go b/collectionsmgmtprovider_ps.go index 67e3703..bc85592 100644 --- a/collectionsmgmtprovider_ps.go +++ b/collectionsmgmtprovider_ps.go @@ -99,7 +99,42 @@ func (cm *collectionsManagementProviderPs) CreateCollection(spec CollectionSpec, } func (cm *collectionsManagementProviderPs) UpdateCollection(spec CollectionSpec, opts *UpdateCollectionOptions) error { - return ErrFeatureNotAvailable + manager := cm.newOpManager(opts.ParentSpan, "manager_collections_update_collection", map[string]interface{}{ + "db.name": cm.bucketName, + "db.couchbase.scope": spec.ScopeName, + "db.couchbase.collection": spec.Name, + "db.operation": "UpdateCollection", + }) + defer manager.Finish(false) + + manager.SetContext(opts.Context) + manager.SetIsIdempotent(false) + manager.SetRetryStrategy(opts.RetryStrategy) + manager.SetTimeout(opts.Timeout) + + if err := manager.CheckReadyForOp(); err != nil { + return err + } + + req := &admin_collection_v1.UpdateCollectionRequest{ + BucketName: cm.bucketName, + ScopeName: spec.ScopeName, + CollectionName: spec.Name, + } + if spec.MaxExpiry > 0 { + expiry := uint32(spec.MaxExpiry.Seconds()) + req.MaxExpirySecs = &expiry + } + if spec.History != nil { + req.HistoryRetentionEnabled = &spec.History.Enabled + } + + _, err := wrapPSOp(manager, req, cm.provider.UpdateCollection) + if err != nil { + return err + } + + return nil } // DropCollection removes a collection.