Fix deletion of event streams resources (#1831)
* fix deletion of event streams * create cluster field to store stream application ids
This commit is contained in:
		
							parent
							
								
									60e0685c32
								
							
						
					
					
						commit
						2333d531d3
					
				|  | @ -91,6 +91,7 @@ type Cluster struct { | ||||||
| 	currentProcess      Process | 	currentProcess      Process | ||||||
| 	processMu           sync.RWMutex // protects the current operation for reporting, no need to hold the master mutex
 | 	processMu           sync.RWMutex // protects the current operation for reporting, no need to hold the master mutex
 | ||||||
| 	specMu              sync.RWMutex // protects the spec for reporting, no need to hold the master mutex
 | 	specMu              sync.RWMutex // protects the spec for reporting, no need to hold the master mutex
 | ||||||
|  | 	streamApplications  []string | ||||||
| 	ConnectionPooler    map[PostgresRole]*ConnectionPoolerObjects | 	ConnectionPooler    map[PostgresRole]*ConnectionPoolerObjects | ||||||
| 	EBSVolumes          map[string]volumes.VolumeProperties | 	EBSVolumes          map[string]volumes.VolumeProperties | ||||||
| 	VolumeResizer       volumes.VolumeResizer | 	VolumeResizer       volumes.VolumeResizer | ||||||
|  |  | ||||||
|  | @ -45,9 +45,17 @@ func (c *Cluster) deleteStreams() error { | ||||||
| 		return nil | 		return nil | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	err = c.KubeClient.FabricEventStreams(c.Namespace).Delete(context.TODO(), c.Name, metav1.DeleteOptions{}) | 	errors := make([]string, 0) | ||||||
|  | 	for _, appId := range c.streamApplications { | ||||||
|  | 		fesName := fmt.Sprintf("%s-%s", c.Name, appId) | ||||||
|  | 		err = c.KubeClient.FabricEventStreams(c.Namespace).Delete(context.TODO(), fesName, metav1.DeleteOptions{}) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 		return fmt.Errorf("could not delete event stream custom resource: %v", err) | 			errors = append(errors, fmt.Sprintf("could not delete event stream %q: %v", fesName, err)) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if len(errors) > 0 { | ||||||
|  | 		return fmt.Errorf("could not delete all event stream custom resources: %v", strings.Join(errors, `', '`)) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	return nil | 	return nil | ||||||
|  | @ -265,6 +273,11 @@ func (c *Cluster) syncStreams() error { | ||||||
| 		return nil | 		return nil | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	// fetch different application IDs from streams section
 | ||||||
|  | 	// there will be a separate event stream resource for each ID
 | ||||||
|  | 	appIds := gatherApplicationIds(c.Spec.Streams) | ||||||
|  | 	c.streamApplications = appIds | ||||||
|  | 
 | ||||||
| 	slots := make(map[string]map[string]string) | 	slots := make(map[string]map[string]string) | ||||||
| 	publications := make(map[string]map[string]acidv1.StreamTable) | 	publications := make(map[string]map[string]acidv1.StreamTable) | ||||||
| 
 | 
 | ||||||
|  | @ -329,9 +342,7 @@ func (c *Cluster) syncStreams() error { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (c *Cluster) createOrUpdateStreams() error { | func (c *Cluster) createOrUpdateStreams() error { | ||||||
| 
 | 	for _, appId := range c.streamApplications { | ||||||
| 	appIds := gatherApplicationIds(c.Spec.Streams) |  | ||||||
| 	for _, appId := range appIds { |  | ||||||
| 		fesName := fmt.Sprintf("%s-%s", c.Name, appId) | 		fesName := fmt.Sprintf("%s-%s", c.Name, appId) | ||||||
| 		effectiveStreams, err := c.KubeClient.FabricEventStreams(c.Namespace).Get(context.TODO(), fesName, metav1.GetOptions{}) | 		effectiveStreams, err := c.KubeClient.FabricEventStreams(c.Namespace).Get(context.TODO(), fesName, metav1.GetOptions{}) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
|  |  | ||||||
|  | @ -196,6 +196,9 @@ func TestGenerateFabricEventStream(t *testing.T) { | ||||||
| 	_, err := cluster.createStatefulSet() | 	_, err := cluster.createStatefulSet() | ||||||
| 	assert.NoError(t, err) | 	assert.NoError(t, err) | ||||||
| 
 | 
 | ||||||
|  | 	// createOrUpdateStreams will loop over existing apps
 | ||||||
|  | 	cluster.streamApplications = []string{appId} | ||||||
|  | 
 | ||||||
| 	// create the streams
 | 	// create the streams
 | ||||||
| 	err = cluster.createOrUpdateStreams() | 	err = cluster.createOrUpdateStreams() | ||||||
| 	assert.NoError(t, err) | 	assert.NoError(t, err) | ||||||
|  | @ -327,6 +330,10 @@ func TestUpdateFabricEventStream(t *testing.T) { | ||||||
| 	_, err := cluster.KubeClient.Postgresqls(namespace).Create( | 	_, err := cluster.KubeClient.Postgresqls(namespace).Create( | ||||||
| 		context.TODO(), &pg, metav1.CreateOptions{}) | 		context.TODO(), &pg, metav1.CreateOptions{}) | ||||||
| 	assert.NoError(t, err) | 	assert.NoError(t, err) | ||||||
|  | 
 | ||||||
|  | 	// createOrUpdateStreams will loop over existing apps
 | ||||||
|  | 	cluster.streamApplications = []string{appId} | ||||||
|  | 
 | ||||||
| 	err = cluster.createOrUpdateStreams() | 	err = cluster.createOrUpdateStreams() | ||||||
| 	assert.NoError(t, err) | 	assert.NoError(t, err) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue