go.temporal.io/server@v1.23.0/common/config/archival.go (about) 1 // The MIT License 2 // 3 // Copyright (c) 2020 Temporal Technologies Inc. All rights reserved. 4 // 5 // Copyright (c) 2020 Uber Technologies, Inc. 6 // 7 // Permission is hereby granted, free of charge, to any person obtaining a copy 8 // of this software and associated documentation files (the "Software"), to deal 9 // in the Software without restriction, including without limitation the rights 10 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 // copies of the Software, and to permit persons to whom the Software is 12 // furnished to do so, subject to the following conditions: 13 // 14 // The above copyright notice and this permission notice shall be included in 15 // all copies or substantial portions of the Software. 16 // 17 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 23 // THE SOFTWARE. 24 25 package config 26 27 import ( 28 "errors" 29 ) 30 31 const ( 32 // ArchivalEnabled is the state for enabling archival 33 ArchivalEnabled = "enabled" 34 // ArchivalDisabled is the state for disabling archival 35 ArchivalDisabled = "disabled" 36 // ArchivalPaused is the state for pausing archival 37 ArchivalPaused = "paused" 38 ) 39 40 // Validate validates the archival config 41 func (a *Archival) Validate(namespaceDefaults *ArchivalNamespaceDefaults) error { 42 if !isArchivalConfigValid(a.History.State, a.History.EnableRead, namespaceDefaults.History.State, namespaceDefaults.History.URI, a.History.Provider != nil) { 43 return errors.New("invalid history archival config") 44 } 45 46 if !isArchivalConfigValid(a.Visibility.State, a.Visibility.EnableRead, namespaceDefaults.Visibility.State, namespaceDefaults.Visibility.URI, a.Visibility.Provider != nil) { 47 return errors.New("invalid visibility archival config") 48 } 49 50 return nil 51 } 52 53 func isArchivalConfigValid( 54 clusterStatus string, 55 enableRead bool, 56 namespaceDefaultStatus string, 57 domianDefaultURI string, 58 specifiedProvider bool, 59 ) bool { 60 archivalEnabled := clusterStatus == ArchivalEnabled 61 URISet := len(domianDefaultURI) != 0 62 63 validEnable := archivalEnabled && URISet && specifiedProvider 64 validDisabled := !archivalEnabled && !enableRead && namespaceDefaultStatus != ArchivalEnabled && !URISet && !specifiedProvider 65 return validEnable || validDisabled 66 }