Merge pull request #291 from zalando-incubator/deepcopy_spec
Use deepcopy to propagate the spec to clusters.
This commit is contained in:
		
						commit
						922b3fa408
					
				|  | @ -1,8 +1,8 @@ | ||||||
| hash: aa008e00a8cf34fa59a081dd67644319f9d5d077bf4de81aa4a25a2d5b8781a1 | hash: 688e15147f1217da635b83ee33f20a3741a400a493787d79992d1650f6e4c514 | ||||||
| updated: 2018-01-15T15:00:53.231516+01:00 | updated: 2018-05-17T10:46:49.090929+02:00 | ||||||
| imports: | imports: | ||||||
| - name: github.com/aws/aws-sdk-go | - name: github.com/aws/aws-sdk-go | ||||||
|   version: 0cebc639926eb91b0192dae4b28bc808417e764c |   version: ee7b4b1162937cba700de23bd90acb742982e626 | ||||||
|   subpackages: |   subpackages: | ||||||
|   - aws |   - aws | ||||||
|   - aws/awserr |   - aws/awserr | ||||||
|  | @ -20,6 +20,8 @@ imports: | ||||||
|   - aws/request |   - aws/request | ||||||
|   - aws/session |   - aws/session | ||||||
|   - aws/signer/v4 |   - aws/signer/v4 | ||||||
|  |   - internal/sdkio | ||||||
|  |   - internal/sdkrand | ||||||
|   - internal/shareddefaults |   - internal/shareddefaults | ||||||
|   - private/protocol |   - private/protocol | ||||||
|   - private/protocol/ec2query |   - private/protocol/ec2query | ||||||
|  | @ -97,6 +99,8 @@ imports: | ||||||
|   - buffer |   - buffer | ||||||
|   - jlexer |   - jlexer | ||||||
|   - jwriter |   - jwriter | ||||||
|  | - name: github.com/mohae/deepcopy | ||||||
|  |   version: c48cc78d482608239f6c4c92a4abd87eb8761c90 | ||||||
| - name: github.com/motomux/pretty | - name: github.com/motomux/pretty | ||||||
|   version: b2aad2c9a95d14eb978f29baa6e3a5c3c20eef30 |   version: b2aad2c9a95d14eb978f29baa6e3a5c3c20eef30 | ||||||
| - name: github.com/PuerkitoBio/purell | - name: github.com/PuerkitoBio/purell | ||||||
|  | @ -104,7 +108,7 @@ imports: | ||||||
| - name: github.com/PuerkitoBio/urlesc | - name: github.com/PuerkitoBio/urlesc | ||||||
|   version: 5bd2802263f21d8788851d5305584c82a5c75d7e |   version: 5bd2802263f21d8788851d5305584c82a5c75d7e | ||||||
| - name: github.com/Sirupsen/logrus | - name: github.com/Sirupsen/logrus | ||||||
|   version: d682213848ed68c0a260ca37d6dd5ace8423f5ba |   version: c155da19408a8799da419ed3eeb0cb5db0ad5dbc | ||||||
| - name: github.com/spf13/pflag | - name: github.com/spf13/pflag | ||||||
|   version: 9ff6c6923cfffbcd502984b8e0c80539a94968b7 |   version: 9ff6c6923cfffbcd502984b8e0c80539a94968b7 | ||||||
| - name: github.com/ugorji/go | - name: github.com/ugorji/go | ||||||
|  | @ -153,7 +157,7 @@ imports: | ||||||
|   - pkg/client/clientset/clientset/scheme |   - pkg/client/clientset/clientset/scheme | ||||||
|   - pkg/client/clientset/clientset/typed/apiextensions/v1beta1 |   - pkg/client/clientset/clientset/typed/apiextensions/v1beta1 | ||||||
| - name: k8s.io/apimachinery | - name: k8s.io/apimachinery | ||||||
|   version: 8ab5f3d8a330c2e9baaf84e39042db8d49034ae2 |   version: 1cb2cdd78d38df243e686d1b572b76e190469842 | ||||||
|   subpackages: |   subpackages: | ||||||
|   - pkg/api/equality |   - pkg/api/equality | ||||||
|   - pkg/api/errors |   - pkg/api/errors | ||||||
|  |  | ||||||
|  | @ -44,3 +44,4 @@ import: | ||||||
|   - tools/clientcmd |   - tools/clientcmd | ||||||
|   - tools/remotecommand |   - tools/remotecommand | ||||||
| - package: gopkg.in/yaml.v2 | - package: gopkg.in/yaml.v2 | ||||||
|  | - package: github.com/mohae/deepcopy | ||||||
|  |  | ||||||
|  | @ -351,7 +351,6 @@ func (c *Controller) queueClusterEvent(informerOldSpec, informerNewSpec *spec.Po | ||||||
| 		uid          types.UID | 		uid          types.UID | ||||||
| 		clusterName  spec.NamespacedName | 		clusterName  spec.NamespacedName | ||||||
| 		clusterError error | 		clusterError error | ||||||
| 		oldSpec, newSpec *spec.Postgresql |  | ||||||
| 	) | 	) | ||||||
| 
 | 
 | ||||||
| 	if informerOldSpec != nil { //update, delete
 | 	if informerOldSpec != nil { //update, delete
 | ||||||
|  | @ -380,22 +379,13 @@ func (c *Controller) queueClusterEvent(informerOldSpec, informerNewSpec *spec.Po | ||||||
| 	// in the informer internal state, making it incohherent with the actual Kubernetes object (and, as a side
 | 	// in the informer internal state, making it incohherent with the actual Kubernetes object (and, as a side
 | ||||||
| 	// effect, the modified state will be returned together with subsequent events).
 | 	// effect, the modified state will be returned together with subsequent events).
 | ||||||
| 
 | 
 | ||||||
| 	if informerOldSpec != nil { |  | ||||||
| 		t := *informerOldSpec |  | ||||||
| 		oldSpec = &t |  | ||||||
| 	} |  | ||||||
| 	if informerNewSpec != nil { |  | ||||||
| 		t := *informerNewSpec |  | ||||||
| 		newSpec = &t |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	workerID := c.clusterWorkerID(clusterName) | 	workerID := c.clusterWorkerID(clusterName) | ||||||
| 	clusterEvent := spec.ClusterEvent{ | 	clusterEvent := spec.ClusterEvent{ | ||||||
| 		EventTime: time.Now(), | 		EventTime: time.Now(), | ||||||
| 		EventType: eventType, | 		EventType: eventType, | ||||||
| 		UID:       uid, | 		UID:       uid, | ||||||
| 		OldSpec:   oldSpec, | 		OldSpec:   informerOldSpec.Clone(), | ||||||
| 		NewSpec:   newSpec, | 		NewSpec:   informerNewSpec.Clone(), | ||||||
| 		WorkerID:  workerID, | 		WorkerID:  workerID, | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -3,6 +3,7 @@ package spec | ||||||
| import ( | import ( | ||||||
| 	"encoding/json" | 	"encoding/json" | ||||||
| 	"fmt" | 	"fmt" | ||||||
|  | 	"github.com/mohae/deepcopy" | ||||||
| 	"regexp" | 	"regexp" | ||||||
| 	"strings" | 	"strings" | ||||||
| 	"time" | 	"time" | ||||||
|  | @ -138,6 +139,19 @@ var ( | ||||||
| 	serviceNameRegex = regexp.MustCompile(serviceNameRegexString) | 	serviceNameRegex = regexp.MustCompile(serviceNameRegexString) | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
|  | // Clone makes a deepcopy of the Postgresql structure. The Error field is nulled-out,
 | ||||||
|  | // as there is no guaratee that the actual implementation of the error interface
 | ||||||
|  | // will not contain any private fields not-reachable to deepcopy. This should be ok,
 | ||||||
|  | // since Error is never read from a Kubernetes object.
 | ||||||
|  | func (p *Postgresql) Clone() *Postgresql { | ||||||
|  | 	if p == nil { | ||||||
|  | 		return nil | ||||||
|  | 	} | ||||||
|  | 	c := deepcopy.Copy(p).(*Postgresql) | ||||||
|  | 	c.Error = nil | ||||||
|  | 	return c | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func parseTime(s string) (time.Time, error) { | func parseTime(s string) (time.Time, error) { | ||||||
| 	parts := strings.Split(s, ":") | 	parts := strings.Split(s, ":") | ||||||
| 	if len(parts) != 2 { | 	if len(parts) != 2 { | ||||||
|  |  | ||||||
|  | @ -4,11 +4,10 @@ import ( | ||||||
| 	"bytes" | 	"bytes" | ||||||
| 	"encoding/json" | 	"encoding/json" | ||||||
| 	"errors" | 	"errors" | ||||||
|  | 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||||
| 	"reflect" | 	"reflect" | ||||||
| 	"testing" | 	"testing" | ||||||
| 	"time" | 	"time" | ||||||
| 
 |  | ||||||
| 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" |  | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| var parseTimeTests = []struct { | var parseTimeTests = []struct { | ||||||
|  | @ -546,3 +545,15 @@ func TestPostgresListMeta(t *testing.T) { | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | func TestPostgresqlClone(t *testing.T) { | ||||||
|  | 	for _, tt := range unmarshalCluster { | ||||||
|  | 		cp := &tt.out | ||||||
|  | 		cp.Error = nil | ||||||
|  | 		clone := cp.Clone() | ||||||
|  | 		if !reflect.DeepEqual(clone, cp) { | ||||||
|  | 			t.Errorf("TestPostgresqlClone expected: \n%#v\n, got \n%#v", cp, clone) | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue