Bug 1687902 - oc replace --cascade=false --force seems to behave weird compared to oc replace --cascade=false
Summary: oc replace --cascade=false --force seems to behave weird compared to oc repla...
Keywords:
Status: CLOSED DUPLICATE of bug 1686838
Alias: None
Product: OpenShift Container Platform
Classification: Red Hat
Component: oc
Version: 3.11.0
Hardware: Unspecified
OS: Unspecified
unspecified
medium
Target Milestone: ---
: 3.11.z
Assignee: Maciej Szulik
QA Contact: Xingxing Xia
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2019-03-12 15:18 UTC by daniel
Modified: 2023-10-06 18:10 UTC (History)
5 users (show)

Fixed In Version:
Doc Type: If docs needed, set a value
Doc Text:
Clone Of:
Environment:
Last Closed: 2019-03-14 15:23:21 UTC
Target Upstream Version:
Embargoed:


Attachments (Terms of Use)
after multiple versions of dc have been created (54.88 KB, image/png)
2019-03-12 15:18 UTC, daniel
no flags Details
after replacing with --force (58.96 KB, image/png)
2019-03-12 15:19 UTC, daniel
no flags Details
after redoing 1. again and then doing replace w/o force (62.74 KB, image/png)
2019-03-12 15:19 UTC, daniel
no flags Details

Description daniel 2019-03-12 15:18:26 UTC
Created attachment 1543239 [details]
after multiple versions of dc have been created

Description of problem:
oc replace --cascade=false --force seems to behave weird compared to oc replace --cascade=false.
Exception would be that --force just would speed things up or make change possible where it would fail w/o force. Here we see a somewhat different behaviour:
with oc replace --cascade=false -f ....we see a new deployment added and going active as well as expetcted, however
with oc replace --cascade=false --force -f ... we do not get a new deployment, however dc prior to replace stays current while latest flag moves to #1

Version-Release number of selected component (if applicable):


How reproducible:
create new app with dc, create a series of dcs and finally replace the latest dc with an updated one

Steps to Reproduce:
1. $ oc new-app openshift/deployment-example
2. $ oc edit dc  (edit terminationGracePeriodSeconds a few times and deploy so that there are roughly 10 deployments) 
3. $ oc replace --cascade=false --force -f deployment-example.yaml 
4a) $ oc replace --cascade=false --force -f deployment-example.yaml 

5) repeat 1 - 3
6) oc replace --cascade=false -f deployment-example.yaml 

Actual results:
A) for 1-4a): when having 10 deployments the replace seems to update deployment version 1 which is flagged latest but #10 is still active
B) for 1-3,5-6): when replacing w/o --force we get an additional dc (#11) which is then latest and active


Expected results:
After reading man page about the force option it seems A) and B) should result in the same or we did not fully understand the man page and would be happy
to get clarification on this. Currently A) looks like a bug  


Additional info:
I'll add screenshots:
1. after multiple versions of dc have been created - dc_pre_replacement.png
2. after replacing with --force  - post_force.png
3. after redoing 1. again and then doing replace w/o force - replace_none_force.png
4. in the next comment I'll add all

Comment 1 daniel 2019-03-12 15:19:29 UTC
Created attachment 1543240 [details]
after replacing with --force

Comment 2 daniel 2019-03-12 15:19:55 UTC
Created attachment 1543241 [details]
after redoing 1. again and then doing replace w/o force

Comment 3 daniel 2019-03-12 15:20:28 UTC
Version :
~~~
[quicklab@master-0 ~]$ oc version 
oc v3.11.82
kubernetes v1.11.0+d4cacc0
features: Basic-Auth GSSAPI Kerberos SPNEGO

Server https://openshift.internal.311test2.lab.rdu2.cee.redhat.com:443
openshift v3.11.82
kubernetes v1.11.0+d4cacc0
[quicklab@master-0 ~]$ 
~~~

- Create a new app: 
~~~
[quicklab@master-0 ~]$ oc new-app openshift/deployment-example
--> Found Docker image 1c839d8 (3 years old) from Docker Hub for "openshift/deployment-example"

    * An image stream tag will be created as "deployment-example:latest" that will track this image
    * This image will be deployed in deployment config "deployment-example"
    * Port 8080/tcp will be load balanced by service "deployment-example"
      * Other containers can access this service through the hostname "deployment-example"
    * WARNING: Image "openshift/deployment-example" runs as the 'root' user which may not be permitted by your cluster administrator

--> Creating resources ...
    imagestream.image.openshift.io "deployment-example" created
    deploymentconfig.apps.openshift.io "deployment-example" created
    service "deployment-example" created
--> Success
    Application is not exposed. You can expose services to the outside world by executing one or more of the commands below:
     'oc expose svc/deployment-example' 
    Run 'oc status' to view your app.
[quicklab@master-0 ~]$ 
~~~

- once the deployment is up and running, we edit the dc and iterate `terminationGracePeriodSeconds:`, wait until the new dc is active
and start over until we do have at least 10 deployments:
~~~
[quicklab@master-0 ~]$ oc edit dc
deploymentconfig.apps.openshift.io/deployment-example edited
[quicklab@master-0 ~]$ oc edit dc
deploymentconfig.apps.openshift.io/deployment-example edited
[quicklab@master-0 ~]$ oc edit dc
deploymentconfig.apps.openshift.io/deployment-example edited
[quicklab@master-0 ~]$ oc edit dc
deploymentconfig.apps.openshift.io/deployment-example edited
[quicklab@master-0 ~]$ oc edit dc
deploymentconfig.apps.openshift.io/deployment-example edited
[quicklab@master-0 ~]$ oc edit dc
deploymentconfig.apps.openshift.io/deployment-example edited
[quicklab@master-0 ~]$ oc edit dc
deploymentconfig.apps.openshift.io/deployment-example edited
[quicklab@master-0 ~]$ oc edit dc
deploymentconfig.apps.openshift.io/deployment-example edited
[quicklab@master-0 ~]$ oc edit dc
deploymentconfig.apps.openshift.io/deployment-example edited
[quicklab@master-0 ~]$ 
~~~

- then the whole project looks like this:
~~~
[quicklab@master-0 ~]$ oc get all
NAME                              READY     STATUS    RESTARTS   AGE
pod/deployment-example-10-7bj4n   1/1       Running   0          1m

NAME                                          DESIRED   CURRENT   READY     AGE
replicationcontroller/deployment-example-1    0         0         0         7m
replicationcontroller/deployment-example-10   1         1         1         1m
replicationcontroller/deployment-example-2    0         0         0         5m
replicationcontroller/deployment-example-3    0         0         0         4m
replicationcontroller/deployment-example-4    0         0         0         4m
replicationcontroller/deployment-example-5    0         0         0         4m
replicationcontroller/deployment-example-6    0         0         0         3m
replicationcontroller/deployment-example-7    0         0         0         3m
replicationcontroller/deployment-example-8    0         0         0         2m
replicationcontroller/deployment-example-9    0         0         0         2m

NAME                         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
service/deployment-example   ClusterIP   172.30.93.20   <none>        8080/TCP   7m

NAME                                                    REVISION   DESIRED   CURRENT   TRIGGERED BY
deploymentconfig.apps.openshift.io/deployment-example   10         1         1         config,image(deployment-example:latest)

NAME                                                DOCKER REPO                                                TAGS      UPDATED
imagestream.image.openshift.io/deployment-example   docker-registry.default.svc:5000/test/deployment-example   latest    7 minutes ago
[quicklab@master-0 ~]$ 
[quicklab@master-0 ~]$ oc rollout history dc/deployment-example
deploymentconfigs "deployment-example"
REVISION	STATUS		CAUSE
1		Complete	config change
2		Complete	config change
3		Complete	config change
4		Complete	config change
5		Complete	config change
6		Complete	config change
7		Complete	config change
8		Complete	config change
9		Complete	config change
10		Complete	config change

[quicklab@master-0 ~]$ 

[quicklab@master-0 ~]$ oc describe dc
Name:		deployment-example
Namespace:	test
Created:	10 minutes ago
Labels:		app=deployment-example
Annotations:	openshift.io/generated-by=OpenShiftNewApp
Latest Version:	10
Selector:	app=deployment-example,deploymentconfig=deployment-example
Replicas:	1
Triggers:	Config, Image(deployment-example@latest, auto=true)
Strategy:	Rolling
Template:
Pod Template:
  Labels:	app=deployment-example
		deploymentconfig=deployment-example
  Annotations:	openshift.io/generated-by=OpenShiftNewApp
  Containers:
   deployment-example:
    Image:		openshift/deployment-example@sha256:ea9135488f323060cb18ab3ec06286cd49e4b3a611fce1a6a442651ecf421f99
    Port:		8080/TCP
    Host Port:		0/TCP
    Environment:	<none>
    Mounts:		<none>
  Volumes:		<none>

Deployment #10 (latest):
	Name:		deployment-example-10
	Created:	5 minutes ago
	Status:		Complete
	Replicas:	1 current / 1 desired
	Selector:	app=deployment-example,deployment=deployment-example-10,deploymentconfig=deployment-example
	Labels:		app=deployment-example,openshift.io/deployment-config.name=deployment-example
	Pods Status:	1 Running / 0 Waiting / 0 Succeeded / 0 Failed
Deployment #9:
	Created:	5 minutes ago
	Status:		Complete
	Replicas:	0 current / 0 desired
Deployment #8:
	Created:	6 minutes ago
	Status:		Complete
	Replicas:	0 current / 0 desired

[...]

~~~

- so we have now 10 deployment configs and rc's where #10 is desired/current and ready
- looking at the web console deployments, I see as well that #10 is latest, Active with 1 replica
--> looks good

--> attached also web console output of the deployment : dc_pre_replacement.png

- We go on and export the dc, increase `terminationGracePeriodSeconds:` again and replace the current dc with `oc replace --cascade=false --force  -f ....`:
~~~

[quicklab@master-0 dc-test]$ vim deployment-example.yaml 
[quicklab@master-0 dc-test]$ oc replace --cascade=false --force -f deployment-example.yaml 
deploymentconfig.apps.openshift.io "deployment-example" deleted
deploymentconfig.apps.openshift.io/deployment-example replaced
[quicklab@master-0 dc-test]$ 
[quicklab@master-0 dc-test]$ 
[quicklab@master-0 dc-test]$ oc get all
NAME                              READY     STATUS    RESTARTS   AGE
pod/deployment-example-10-tvxb2   1/1       Running   0          2m

NAME                                          DESIRED   CURRENT   READY     AGE
replicationcontroller/deployment-example-1    0         0         0         8m
replicationcontroller/deployment-example-10   1         1         1         2m
replicationcontroller/deployment-example-2    0         0         0         7m
replicationcontroller/deployment-example-3    0         0         0         7m
replicationcontroller/deployment-example-4    0         0         0         6m
replicationcontroller/deployment-example-5    0         0         0         5m
replicationcontroller/deployment-example-6    0         0         0         5m
replicationcontroller/deployment-example-7    0         0         0         4m
replicationcontroller/deployment-example-8    0         0         0         3m
replicationcontroller/deployment-example-9    0         0         0         2m

NAME                         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
service/deployment-example   ClusterIP   172.30.145.69   <none>        8080/TCP   8m

NAME                                                    REVISION   DESIRED   CURRENT   TRIGGERED BY
deploymentconfig.apps.openshift.io/deployment-example   1          1         0         config,image(deployment-example:latest)

NAME                                                DOCKER REPO                                                TAGS      UPDATED
imagestream.image.openshift.io/deployment-example   docker-registry.default.svc:5000/test/deployment-example   latest    8 minutes ago
[quicklab@master-0 dc-test]$ 
[quicklab@master-0 dc-test]$ oc rollout history dc/deployment-example
deploymentconfigs "deployment-example"
REVISION	STATUS		CAUSE
1		Complete	config change
2		Complete	config change
3		Complete	config change
4		Complete	config change
5		Complete	config change
6		Complete	config change
7		Complete	config change
8		Complete	config change
9		Complete	config change
10		Complete	config change

[quicklab@master-0 dc-test]$ 
[quicklab@master-0 dc-test]$ oc describe dc
Name:		deployment-example
Namespace:	test
Created:	11 minutes ago
Labels:		app=deployment-example
Annotations:	openshift.io/generated-by=OpenShiftNewApp
Latest Version:	1
Selector:	app=deployment-example,deploymentconfig=deployment-example
Replicas:	1
Triggers:	Config, Image(deployment-example@latest, auto=true)
Strategy:	Rolling
Template:
Pod Template:
  Labels:	app=deployment-example
		deploymentconfig=deployment-example
  Annotations:	openshift.io/generated-by=OpenShiftNewApp
  Containers:
   deployment-example:
    Image:		openshift/deployment-example@sha256:ea9135488f323060cb18ab3ec06286cd49e4b3a611fce1a6a442651ecf421f99
    Port:		8080/TCP
    Host Port:		0/TCP
    Environment:	<none>
    Mounts:		<none>
  Volumes:		<none>

Deployment #1 (latest):
	Created:	19 minutes ago
	Status:		Complete
	Replicas:	0 current / 0 desired
Deployment #10:
	Name:		deployment-example-10
	Created:	12 minutes ago
	Status:		Complete
	Replicas:	1 current / 1 desired
	Selector:	app=deployment-example,deployment=deployment-example-10,deploymentconfig=deployment-example
	Labels:		app=deployment-example,openshift.io/deployment-config.name=deployment-example
	Pods Status:	1 Running / 0 Waiting / 0 Succeeded / 0 Failed
Deployment #9:
	Created:	13 minutes ago
	Status:		Complete
	Replicas:	0 current / 0 desired

Events:	<none>
[quicklab@master-0 dc-test]$ 
~~~ 
- so looking at the above output: 

~~~
pod/deployment-example-10-tvxb2   1/1       Running   0          2m

NAME                                          DESIRED   CURRENT   READY     AGE
replicationcontroller/deployment-example-1    0         0         0         8m
replicationcontroller/deployment-example-10   1         1         1         2m

however, we see 


[quicklab@master-0 dc-test]$ oc describe dc
[..]
Deployment #1 (latest):
	Created:	19 minutes ago
	Status:		Complete
	Replicas:	0 current / 0 desired
Deployment #10:
	Name:		deployment-example-10
	Created:	12 minutes ago
	Status:		Complete
	Replicas:	1 current / 1 desired
	Selector:	app=deployment-example,deployment=deployment-example-10,deploymentconfig=deployment-example
	Labels:		app=deployment-example,openshift.io/deployment-config.name=deployment-example
	Pods Status:	1 Running / 0 Waiting / 0 Succeeded / 0 Failed
~~~
- and also web console shows that dc #10 is running (attached pic: post_force.png), while #1 is latest which seems strange 
Understanding is that with replacement the latest running is replaced and is the latest which is the behaviour when not using force)



- repeating all of the above, but replacing without --force seems to be a more logical result:
~~~
[quicklab@master-0 dc-test]$ oc replace --cascade=false -f deployment-example.yaml 
deploymentconfig.apps.openshift.io/deployment-example replaced
[quicklab@master-0 dc-test]$ 

[quicklab@master-0 dc-test]$ oc get all
NAME                               READY     STATUS        RESTARTS   AGE
pod/deployment-example-10-htwfc    0/1       Terminating   0          22m
pod/deployment-example-11-deploy   1/1       Running       0          6s
pod/deployment-example-11-ntg9k    1/1       Running       0          0s

NAME                                          DESIRED   CURRENT   READY     AGE
replicationcontroller/deployment-example-1    0         0         0         26m
replicationcontroller/deployment-example-10   0         0         0         22m
replicationcontroller/deployment-example-11   1         1         1         7s
replicationcontroller/deployment-example-2    0         0         0         25m
replicationcontroller/deployment-example-3    0         0         0         25m
replicationcontroller/deployment-example-4    0         0         0         24m
replicationcontroller/deployment-example-5    0         0         0         24m
replicationcontroller/deployment-example-6    0         0         0         24m
replicationcontroller/deployment-example-7    0         0         0         23m
replicationcontroller/deployment-example-8    0         0         0         23m
replicationcontroller/deployment-example-9    0         0         0         22m

NAME                         TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)    AGE
service/deployment-example   ClusterIP   172.30.3.16   <none>        8080/TCP   26m

NAME                                                    REVISION   DESIRED   CURRENT   TRIGGERED BY
deploymentconfig.apps.openshift.io/deployment-example   11         1         1         config,image(deployment-example:latest)

NAME                                                DOCKER REPO                                                TAGS      UPDATED
imagestream.image.openshift.io/deployment-example   docker-registry.default.svc:5000/test/deployment-example   latest    26 minutes ago
[quicklab@master-0 dc-test]$ 
[quicklab@master-0 dc-test]$ oc rollout history dc/deployment-example
deploymentconfigs "deployment-example"
REVISION	STATUS		CAUSE
1		Complete	config change
2		Complete	config change
3		Complete	config change
4		Complete	config change
5		Complete	config change
6		Complete	config change
7		Complete	config change
8		Complete	config change
9		Complete	config change
10		Complete	config change
11		Complete	config change

[quicklab@master-0 dc-test]$ 
[quicklab@master-0 dc-test]$ oc describe dc
Name:		deployment-example
Namespace:	test
Created:	26 minutes ago
Labels:		app=deployment-example
Annotations:	openshift.io/generated-by=OpenShiftNewApp
Latest Version:	11
Selector:	app=deployment-example,deploymentconfig=deployment-example
Replicas:	1
Triggers:	Config, Image(deployment-example@latest, auto=true)
Strategy:	Rolling
Template:
Pod Template:
  Labels:	app=deployment-example
		deploymentconfig=deployment-example
  Annotations:	openshift.io/generated-by=OpenShiftNewApp
  Containers:
   deployment-example:
    Image:		openshift/deployment-example@sha256:ea9135488f323060cb18ab3ec06286cd49e4b3a611fce1a6a442651ecf421f99
    Port:		8080/TCP
    Host Port:		0/TCP
    Environment:	<none>
    Mounts:		<none>
  Volumes:		<none>

Deployment #11 (latest):
	Name:		deployment-example-11
	Created:	18 seconds ago
	Status:		Complete
	Replicas:	1 current / 1 desired
	Selector:	app=deployment-example,deployment=deployment-example-11,deploymentconfig=deployment-example
	Labels:		app=deployment-example,openshift.io/deployment-config.name=deployment-example
	Pods Status:	1 Running / 0 Waiting / 0 Succeeded / 0 Failed
Deployment #10:
	Created:	22 minutes ago
	Status:		Complete
	Replicas:	0 current / 0 desired
Deployment #9:
	Created:	22 minutes ago
	Status:		Complete
	Replicas:	0 current / 0 desired
~~~

--> in this case the latest is now 11 which is latest and active

Comment 4 Maciej Szulik 2019-03-14 15:23:21 UTC
There's https://bugzilla.redhat.com/show_bug.cgi?id=1686838 already tracking this problem.
Let's make it simple and continue this in a single BZ entry.

*** This bug has been marked as a duplicate of bug 1686838 ***


Note You need to log in before you can comment on or make changes to this bug.