go.temporal.io/server@v1.23.0/common/persistence/client/bean.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 //go:generate mockgen -copyright_file ../../../LICENSE -package $GOPACKAGE -source $GOFILE -destination bean_mock.go 26 27 package client 28 29 import ( 30 "sync" 31 32 "go.temporal.io/server/common/persistence" 33 ) 34 35 type ( 36 // Bean in an collection of persistence manager 37 Bean interface { 38 Close() 39 40 GetClusterMetadataManager() persistence.ClusterMetadataManager 41 GetMetadataManager() persistence.MetadataManager 42 GetTaskManager() persistence.TaskManager 43 GetNamespaceReplicationQueue() persistence.NamespaceReplicationQueue 44 GetShardManager() persistence.ShardManager 45 GetExecutionManager() persistence.ExecutionManager 46 } 47 48 // BeanImpl stores persistence managers 49 BeanImpl struct { 50 sync.RWMutex 51 52 clusterMetadataManager persistence.ClusterMetadataManager 53 metadataManager persistence.MetadataManager 54 taskManager persistence.TaskManager 55 namespaceReplicationQueue persistence.NamespaceReplicationQueue 56 shardManager persistence.ShardManager 57 executionManager persistence.ExecutionManager 58 59 factory Factory 60 isClosed bool 61 } 62 ) 63 64 var _ Bean = (*BeanImpl)(nil) 65 66 // NewBeanFromFactory crate a new store bean using factory 67 func NewBeanFromFactory( 68 factory Factory, 69 ) (*BeanImpl, error) { 70 clusterMetadataMgr, err := factory.NewClusterMetadataManager() 71 if err != nil { 72 return nil, err 73 } 74 75 metadataMgr, err := factory.NewMetadataManager() 76 if err != nil { 77 return nil, err 78 } 79 80 taskMgr, err := factory.NewTaskManager() 81 if err != nil { 82 return nil, err 83 } 84 85 namespaceReplicationQueue, err := factory.NewNamespaceReplicationQueue() 86 if err != nil { 87 return nil, err 88 } 89 90 shardMgr, err := factory.NewShardManager() 91 if err != nil { 92 return nil, err 93 } 94 95 executionManager, err := factory.NewExecutionManager() 96 if err != nil { 97 return nil, err 98 } 99 100 return NewBean( 101 factory, 102 clusterMetadataMgr, 103 metadataMgr, 104 taskMgr, 105 namespaceReplicationQueue, 106 shardMgr, 107 executionManager, 108 ), nil 109 } 110 111 // NewBean create a new store bean 112 func NewBean( 113 factory Factory, 114 clusterMetadataManager persistence.ClusterMetadataManager, 115 metadataManager persistence.MetadataManager, 116 taskManager persistence.TaskManager, 117 namespaceReplicationQueue persistence.NamespaceReplicationQueue, 118 shardManager persistence.ShardManager, 119 executionManager persistence.ExecutionManager, 120 ) *BeanImpl { 121 return &BeanImpl{ 122 factory: factory, 123 clusterMetadataManager: clusterMetadataManager, 124 metadataManager: metadataManager, 125 taskManager: taskManager, 126 namespaceReplicationQueue: namespaceReplicationQueue, 127 shardManager: shardManager, 128 executionManager: executionManager, 129 isClosed: false, 130 } 131 } 132 133 // GetClusterMetadataManager get ClusterMetadataManager 134 func (s *BeanImpl) GetClusterMetadataManager() persistence.ClusterMetadataManager { 135 s.RLock() 136 defer s.RUnlock() 137 138 return s.clusterMetadataManager 139 } 140 141 // GetMetadataManager get MetadataManager 142 func (s *BeanImpl) GetMetadataManager() persistence.MetadataManager { 143 144 s.RLock() 145 defer s.RUnlock() 146 147 return s.metadataManager 148 } 149 150 // GetTaskManager get TaskManager 151 func (s *BeanImpl) GetTaskManager() persistence.TaskManager { 152 153 s.RLock() 154 defer s.RUnlock() 155 156 return s.taskManager 157 } 158 159 // GetNamespaceReplicationQueue get NamespaceReplicationQueue 160 func (s *BeanImpl) GetNamespaceReplicationQueue() persistence.NamespaceReplicationQueue { 161 s.RLock() 162 defer s.RUnlock() 163 164 return s.namespaceReplicationQueue 165 } 166 167 // GetShardManager get ShardManager 168 func (s *BeanImpl) GetShardManager() persistence.ShardManager { 169 170 s.RLock() 171 defer s.RUnlock() 172 173 return s.shardManager 174 } 175 176 // GetExecutionManager get ExecutionManager 177 func (s *BeanImpl) GetExecutionManager() persistence.ExecutionManager { 178 s.RLock() 179 defer s.RUnlock() 180 181 return s.executionManager 182 } 183 184 // Close cleanup connections 185 func (s *BeanImpl) Close() { 186 s.Lock() 187 defer s.Unlock() 188 189 if s.isClosed { 190 return 191 } 192 193 s.clusterMetadataManager.Close() 194 s.metadataManager.Close() 195 s.taskManager.Close() 196 s.namespaceReplicationQueue.Stop() 197 s.shardManager.Close() 198 s.executionManager.Close() 199 200 s.factory.Close() 201 s.isClosed = true 202 }