Skip to content

Commit

Permalink
MB-42531 - Migration mode in CE should not be allowed to set to true
Browse files Browse the repository at this point in the history
MB-42538 - Explicit mapping mode in CE should not be allowed to set to true

Change-Id: I5f3c29d496e21e2c1e4d31bc67008a4abeb8c4ba
Reviewed-on: http://review.couchbase.org/c/goxdcr/+/139743
Reviewed-by: Lilei Chen <lilei.chen@couchbase.com>
Reviewed-by: Neil Huang <neil.huang@couchbase.com>
Tested-by: Neil Huang <neil.huang@couchbase.com>
  • Loading branch information
nelio2k committed Nov 6, 2020
1 parent c603b62 commit 98bc75d
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 11 deletions.
1 change: 1 addition & 0 deletions base/constant.go
Expand Up @@ -294,6 +294,7 @@ var ErrorInvalidColNamespaceFormat = fmt.Errorf("Invalid CollectionNamespace for
var ErrorCAPIDeprecated = errors.New("CAPI replication mode is now deprecated")
var ReplicationSpecNotFoundErrorMessage = "requested resource not found"
var ReplNotFoundErr = errors.New(ReplicationSpecNotFoundErrorMessage)
var ErrorExplicitMappingEnterpriseOnly = errors.New("Explicit Mapping is supported in Enterprise Edition only")

func GetBackfillFatalDataLossError(specId string) error {
return fmt.Errorf("%v experienced fatal error when trying to create backfill request. To prevent data loss, the pipeline must restream from the beginning", specId)
Expand Down
14 changes: 7 additions & 7 deletions metadata/replicationSettings_test.go
Expand Up @@ -168,14 +168,14 @@ func TestValidateSettingExpDelFlagPersist(t *testing.T) {
var valArr []string = []string{"true"}
var key string = FilterExpKey
checkValArr := valArr[0]
retKey, retValArr, err := helper.CheckAndConvertMultiValue(key, valArr)
retKey, retValArr, err := helper.CheckAndConvertMultiValue(key, valArr, false)
assert.Equal(base.FilterExpDelKey, retKey)
assert.NotEqual(retValArr[0], checkValArr)
assert.Nil(err)
assert.Equal(retValArr[0], base.FilterExpDelSkipExpiration.String())
key = FilterDelKey
valArr[0] = "true"
retKey, retValArr, err = helper.CheckAndConvertMultiValue(key, valArr)
retKey, retValArr, err = helper.CheckAndConvertMultiValue(key, valArr, false)
var checkVal base.FilterExpDelType
checkVal.SetSkipDeletes(true)
checkVal.SetSkipExpiration(true)
Expand All @@ -192,13 +192,13 @@ func TestMultiValueHelperCheckAndConvert(t *testing.T) {
// Assuming user passes in 2 flags, skipDel and skipExp
key := FilterExpKey
valArr = append(valArr, "true")
key, valArr, err := mvHelper.CheckAndConvertMultiValue(key, valArr)
key, valArr, err := mvHelper.CheckAndConvertMultiValue(key, valArr, false)
assert.Nil(err)
assert.NotEqual(FilterExpKey, key)
assert.NotEqual("true", valArr[0])
key = FilterDelKey
valArr[0] = "true"
key, valArr, err = mvHelper.CheckAndConvertMultiValue(key, valArr)
key, valArr, err = mvHelper.CheckAndConvertMultiValue(key, valArr, false)
assert.Nil(err)

// test export to settingsmap
Expand All @@ -223,13 +223,13 @@ func TestMultiValueHelperCheckAndConvert(t *testing.T) {
mvHelper = NewMultiValueHelper()
key = FilterExpKey
valArr[0] = "false"
mvHelper.CheckAndConvertMultiValue(key, valArr)
mvHelper.CheckAndConvertMultiValue(key, valArr, false)
key = FilterDelKey
valArr[0] = "true"
mvHelper.CheckAndConvertMultiValue(key, valArr)
mvHelper.CheckAndConvertMultiValue(key, valArr, false)
key = BypassExpiryKey
valArr[0] = "false"
mvHelper.CheckAndConvertMultiValue(key, valArr)
mvHelper.CheckAndConvertMultiValue(key, valArr, false)
mvHelper.ExportToSettingsMap(settingsMap)
assert.Equal(1, len(settingsMap))
replSettings.UpdateSettingsFromMap(settingsMap)
Expand Down
14 changes: 11 additions & 3 deletions metadata/replication_settings.go
Expand Up @@ -261,7 +261,7 @@ func NewMultiValueHelper() *ReplicationMultiValueHelper {
}
}

func (r *ReplicationMultiValueHelper) CheckAndConvertMultiValue(key string, valArr []string) (restKey string, outValArr []string, err error) {
func (r *ReplicationMultiValueHelper) CheckAndConvertMultiValue(key string, valArr []string, isEnterprise bool) (restKey string, outValArr []string, err error) {
var settingsConfigKey string
var newVal interface{}
for k, v := range MultiValueMap {
Expand Down Expand Up @@ -297,7 +297,7 @@ func (r *ReplicationMultiValueHelper) CheckAndConvertMultiValue(key string, valA
r.activeConfig[settingsConfigKey] = newVal
outValArr[0] = newVal.(base.FilterExpDelType).String()
case CollectionsMgtMultiKey:
newVal, err = r.handleCollectionsMgtKey(r.activeConfig[settingsConfigKey].(base.CollectionsMgtType), key, valArr[0])
newVal, err = r.handleCollectionsMgtKey(r.activeConfig[settingsConfigKey].(base.CollectionsMgtType), key, valArr[0], isEnterprise)
if err != nil {
return
}
Expand All @@ -310,18 +310,26 @@ func (r *ReplicationMultiValueHelper) CheckAndConvertMultiValue(key string, valA
return
}

func (r *ReplicationMultiValueHelper) handleCollectionsMgtKey(curConfig base.CollectionsMgtType, key, val string) (retVal interface{}, err error) {
func (r *ReplicationMultiValueHelper) handleCollectionsMgtKey(curConfig base.CollectionsMgtType, key, val string, enterprise bool) (retVal interface{}, err error) {
boolVal, err := r.parseBoolAndMarkSet(key, val)
if err != nil {
return
}

switch key {
case CollectionsMgtMappingKey:
if !enterprise && boolVal {
err = base.ErrorExplicitMappingEnterpriseOnly
return
}
curConfig.SetExplicitMapping(boolVal)
case CollectionsMgtMirrorKey:
curConfig.SetMirroring(boolVal)
case CollectionsMgtMigrateKey:
if !enterprise && boolVal {
err = base.ErrorColMigrationEnterpriseOnly
return
}
curConfig.SetMigration(boolVal)
case CollectionsMgtOsoKey:
curConfig.SetOSO(boolVal)
Expand Down
2 changes: 1 addition & 1 deletion replication_manager/msg_utils.go
Expand Up @@ -859,7 +859,7 @@ func DecodeSettingsFromRequest(request *http.Request, isDefaultSettings bool, is
}

for key, valArr := range request.Form {
key, valArr, err := mvHelper.CheckAndConvertMultiValue(key, valArr)
key, valArr, err := mvHelper.CheckAndConvertMultiValue(key, valArr, isEnterprise)
if err != nil {
errorsMap[key] = err
continue
Expand Down

0 comments on commit 98bc75d

Please sign in to comment.