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  }