...

Source file src/github.com/launchdarkly/go-server-sdk/v6/internal/datastore/data_store_update_sink_impl.go

Documentation: github.com/launchdarkly/go-server-sdk/v6/internal/datastore

     1  package datastore
     2  
     3  import (
     4  	"sync"
     5  
     6  	"github.com/launchdarkly/go-server-sdk/v6/interfaces"
     7  	"github.com/launchdarkly/go-server-sdk/v6/internal"
     8  )
     9  
    10  // DataStoreUpdateSinkImpl is the internal implementation of DataStoreUpdateSink. It is exported
    11  // because the actual implementation type, rather than the interface, is required as a dependency
    12  // of other SDK components.
    13  type DataStoreUpdateSinkImpl struct {
    14  	lastStatus  interfaces.DataStoreStatus
    15  	broadcaster *internal.Broadcaster[interfaces.DataStoreStatus]
    16  	lock        sync.Mutex
    17  }
    18  
    19  // NewDataStoreUpdateSinkImpl creates the internal implementation of DataStoreUpdateSink.
    20  func NewDataStoreUpdateSinkImpl(
    21  	broadcaster *internal.Broadcaster[interfaces.DataStoreStatus],
    22  ) *DataStoreUpdateSinkImpl {
    23  	return &DataStoreUpdateSinkImpl{
    24  		lastStatus:  interfaces.DataStoreStatus{Available: true},
    25  		broadcaster: broadcaster,
    26  	}
    27  }
    28  
    29  func (d *DataStoreUpdateSinkImpl) getStatus() interfaces.DataStoreStatus {
    30  	d.lock.Lock()
    31  	defer d.lock.Unlock()
    32  	return d.lastStatus
    33  }
    34  
    35  func (d *DataStoreUpdateSinkImpl) getBroadcaster() *internal.Broadcaster[interfaces.DataStoreStatus] {
    36  	return d.broadcaster
    37  }
    38  
    39  // UpdateStatus is called from the data store to push a status update.
    40  func (d *DataStoreUpdateSinkImpl) UpdateStatus(newStatus interfaces.DataStoreStatus) {
    41  	d.lock.Lock()
    42  	modified := false
    43  	if newStatus != d.lastStatus {
    44  		d.lastStatus = newStatus
    45  		modified = true
    46  	}
    47  	d.lock.Unlock()
    48  	if modified {
    49  		d.broadcaster.Broadcast(newStatus)
    50  	}
    51  }
    52  

View as plain text