@@ -96,6 +96,246 @@ $ curl http://localhost:9002/info
9696{"app":{"description":"Spring Cloud Stream Log Sink Rabbit Binder Application","name":"log-sink-rabbit","version":"1.2.0.RELEASE"}}
9797----
9898
99+ === Force upgrade of a Stream
100+
101+ When upgrading a stream, the --force option can be used to deploy new instances of currently deployed applications even if no applicaton or deployment properties have changed.
102+ This behavior is needed in the case when configuration information is obtained by the application itself at startup time, for example from Spring Cloud Config Server.
103+ You can specify which applications to force upgrade by using the option --app-names.
104+ If you do not specify any application names, all the applications will be force upgraded.
105+ You can specify --force and --app-names options together with --properties or --propertiesFile options.
106+
107+ === Overriding properties during Stream update
108+
109+ The properties that are passed during stream update are added on top of the existing properties for the same stream.
110+
111+ For instance, the stream `ticktock` is deployed without any explicit properties as follows:
112+
113+ [source,bash]
114+ ----
115+ dataflow:>stream create --name ticktock --definition "time | log --name=mylogger"
116+ Created new stream 'ticktock'
117+
118+ dataflow:>stream deploy --name ticktock
119+ Deployment request has been sent for stream 'ticktock'
120+ ----
121+
122+ [source,bash]
123+ ----
124+ dataflow:>stream manifest --name ticktock
125+ "apiVersion": "skipper.spring.io/v1"
126+ "kind": "SpringCloudDeployerApplication"
127+ "metadata":
128+ "name": "time"
129+ "spec":
130+ "resource": "maven://org.springframework.cloud.stream.app:time-source-rabbit"
131+ "resourceMetadata": "maven://org.springframework.cloud.stream.app:time-source-rabbit:jar:metadata:1.3.1.RELEASE"
132+ "version": "1.3.1.RELEASE"
133+ "applicationProperties":
134+ "spring.metrics.export.triggers.application.includes": "integration**"
135+ "spring.cloud.dataflow.stream.app.label": "time"
136+ "spring.cloud.stream.metrics.key": "ticktock.time.${spring.cloud.application.guid}"
137+ "spring.cloud.stream.bindings.output.producer.requiredGroups": "ticktock"
138+ "spring.cloud.stream.metrics.properties": "spring.application.name,spring.application.index,spring.cloud.application.*,spring.cloud.dataflow.*"
139+ "spring.cloud.stream.bindings.output.destination": "ticktock.time"
140+ "spring.cloud.dataflow.stream.name": "ticktock"
141+ "spring.cloud.dataflow.stream.app.type": "source"
142+ "deploymentProperties":
143+ "spring.cloud.deployer.group": "ticktock"
144+ ---
145+ "apiVersion": "skipper.spring.io/v1"
146+ "kind": "SpringCloudDeployerApplication"
147+ "metadata":
148+ "name": "log"
149+ "spec":
150+ "resource": "maven://org.springframework.cloud.stream.app:log-sink-rabbit"
151+ "resourceMetadata": "maven://org.springframework.cloud.stream.app:log-sink-rabbit:jar:metadata:1.3.1.RELEASE"
152+ "version": "1.3.1.RELEASE"
153+ "applicationProperties":
154+ "spring.metrics.export.triggers.application.includes": "integration**"
155+ "spring.cloud.dataflow.stream.app.label": "log"
156+ "spring.cloud.stream.metrics.key": "ticktock.log.${spring.cloud.application.guid}"
157+ "spring.cloud.stream.bindings.input.group": "ticktock"
158+ "log.name": "mylogger"
159+ "spring.cloud.stream.metrics.properties": "spring.application.name,spring.application.index,spring.cloud.application.*,spring.cloud.dataflow.*"
160+ "spring.cloud.dataflow.stream.name": "ticktock"
161+ "spring.cloud.dataflow.stream.app.type": "sink"
162+ "spring.cloud.stream.bindings.input.destination": "ticktock.time"
163+ "deploymentProperties":
164+ "spring.cloud.deployer.group": "ticktock"
165+ ----
166+
167+ In the second update, we try to add a new property for `log` application `foo2=bar2`.
168+
169+ [source,bash]
170+ ----
171+ dataflow:>stream update --name ticktock --properties app.log.foo2=bar2
172+ Update request has been sent for the stream 'ticktock'
173+
174+ dataflow:>stream manifest --name ticktock
175+ "apiVersion": "skipper.spring.io/v1"
176+ "kind": "SpringCloudDeployerApplication"
177+ "metadata":
178+ "name": "time"
179+ "spec":
180+ "resource": "maven://org.springframework.cloud.stream.app:time-source-rabbit"
181+ "resourceMetadata": "maven://org.springframework.cloud.stream.app:time-source-rabbit:jar:metadata:1.3.1.RELEASE"
182+ "version": "1.3.1.RELEASE"
183+ "applicationProperties":
184+ "spring.metrics.export.triggers.application.includes": "integration**"
185+ "spring.cloud.dataflow.stream.app.label": "time"
186+ "spring.cloud.stream.metrics.key": "ticktock.time.${spring.cloud.application.guid}"
187+ "spring.cloud.stream.bindings.output.producer.requiredGroups": "ticktock"
188+ "spring.cloud.stream.metrics.properties": "spring.application.name,spring.application.index,spring.cloud.application.*,spring.cloud.dataflow.*"
189+ "spring.cloud.stream.bindings.output.destination": "ticktock.time"
190+ "spring.cloud.dataflow.stream.name": "ticktock"
191+ "spring.cloud.dataflow.stream.app.type": "source"
192+ "deploymentProperties":
193+ "spring.cloud.deployer.group": "ticktock"
194+ ---
195+ "apiVersion": "skipper.spring.io/v1"
196+ "kind": "SpringCloudDeployerApplication"
197+ "metadata":
198+ "name": "log"
199+ "spec":
200+ "resource": "maven://org.springframework.cloud.stream.app:log-sink-rabbit"
201+ "resourceMetadata": "maven://org.springframework.cloud.stream.app:log-sink-rabbit:jar:metadata:1.3.1.RELEASE"
202+ "version": "1.3.1.RELEASE"
203+ "applicationProperties":
204+ "spring.metrics.export.triggers.application.includes": "integration**"
205+ "spring.cloud.dataflow.stream.app.label": "log"
206+ "spring.cloud.stream.metrics.key": "ticktock.log.${spring.cloud.application.guid}"
207+ "spring.cloud.stream.bindings.input.group": "ticktock"
208+ "log.name": "mylogger"
209+ "spring.cloud.stream.metrics.properties": "spring.application.name,spring.application.index,spring.cloud.application.*,spring.cloud.dataflow.*"
210+ "spring.cloud.dataflow.stream.name": "ticktock"
211+ "spring.cloud.dataflow.stream.app.type": "sink"
212+ "foo2": "bar2" // <1>
213+ "spring.cloud.stream.bindings.input.destination": "ticktock.time"
214+ "deploymentProperties":
215+ "spring.cloud.deployer.count": "1"
216+ "spring.cloud.deployer.group": "ticktock"
217+
218+ dataflow:>stream list
219+ ╔═══════════╤══════════════════════════════════════════╤═════════════════════════════════════════╗
220+ ║Stream Name│ Stream Definition │ Status ║
221+ ╠═══════════╪══════════════════════════════════════════╪═════════════════════════════════════════╣
222+ ║ticktock │time | log --log.name=mylogger --foo2=bar2│The stream has been successfully deployed║
223+ ╚═══════════╧══════════════════════════════════════════╧═════════════════════════════════════════╝
224+
225+ ----
226+
227+ <1> Property `foo2=bar2` is applied for the `log` application.
228+
229+ Now, when we add another property `foo3=bar3` to `log` application, this new property is added on top of the existing properties for the stream `ticktock`.
230+
231+ [source,bash]
232+ ----
233+ dataflow:>stream update --name ticktock --properties app.log.foo3=bar3
234+ Update request has been sent for the stream 'ticktock'
235+
236+ dataflow:>stream manifest --name ticktock
237+ "apiVersion": "skipper.spring.io/v1"
238+ "kind": "SpringCloudDeployerApplication"
239+ "metadata":
240+ "name": "time"
241+ "spec":
242+ "resource": "maven://org.springframework.cloud.stream.app:time-source-rabbit"
243+ "resourceMetadata": "maven://org.springframework.cloud.stream.app:time-source-rabbit:jar:metadata:1.3.1.RELEASE"
244+ "version": "1.3.1.RELEASE"
245+ "applicationProperties":
246+ "spring.metrics.export.triggers.application.includes": "integration**"
247+ "spring.cloud.dataflow.stream.app.label": "time"
248+ "spring.cloud.stream.metrics.key": "ticktock.time.${spring.cloud.application.guid}"
249+ "spring.cloud.stream.bindings.output.producer.requiredGroups": "ticktock"
250+ "spring.cloud.stream.metrics.properties": "spring.application.name,spring.application.index,spring.cloud.application.*,spring.cloud.dataflow.*"
251+ "spring.cloud.stream.bindings.output.destination": "ticktock.time"
252+ "spring.cloud.dataflow.stream.name": "ticktock"
253+ "spring.cloud.dataflow.stream.app.type": "source"
254+ "deploymentProperties":
255+ "spring.cloud.deployer.group": "ticktock"
256+ ---
257+ "apiVersion": "skipper.spring.io/v1"
258+ "kind": "SpringCloudDeployerApplication"
259+ "metadata":
260+ "name": "log"
261+ "spec":
262+ "resource": "maven://org.springframework.cloud.stream.app:log-sink-rabbit"
263+ "resourceMetadata": "maven://org.springframework.cloud.stream.app:log-sink-rabbit:jar:metadata:1.3.1.RELEASE"
264+ "version": "1.3.1.RELEASE"
265+ "applicationProperties":
266+ "spring.metrics.export.triggers.application.includes": "integration**"
267+ "spring.cloud.dataflow.stream.app.label": "log"
268+ "spring.cloud.stream.metrics.key": "ticktock.log.${spring.cloud.application.guid}"
269+ "spring.cloud.stream.bindings.input.group": "ticktock"
270+ "log.name": "mylogger"
271+ "spring.cloud.stream.metrics.properties": "spring.application.name,spring.application.index,spring.cloud.application.*,spring.cloud.dataflow.*"
272+ "spring.cloud.dataflow.stream.name": "ticktock"
273+ "spring.cloud.dataflow.stream.app.type": "sink"
274+ "foo2": "bar2" <1>
275+ "spring.cloud.stream.bindings.input.destination": "ticktock.time"
276+ "foo3": "bar3" <1>
277+ "deploymentProperties":
278+ "spring.cloud.deployer.count": "1"
279+ "spring.cloud.deployer.group": "ticktock"
280+ ----
281+
282+ <1> The property `foo3=bar3` is added along with the existing `foo2=bar2` for the `log` application.
283+
284+ We can still override the existing properties as follows:
285+
286+ [source,bash]
287+ ----
288+ dataflow:>stream update --name ticktock --properties app.log.foo3=bar4
289+ Update request has been sent for the stream 'ticktock'
290+
291+ dataflow:>stream manifest ticktock
292+ "apiVersion": "skipper.spring.io/v1"
293+ "kind": "SpringCloudDeployerApplication"
294+ "metadata":
295+ "name": "time"
296+ "spec":
297+ "resource": "maven://org.springframework.cloud.stream.app:time-source-rabbit"
298+ "resourceMetadata": "maven://org.springframework.cloud.stream.app:time-source-rabbit:jar:metadata:1.3.1.RELEASE"
299+ "version": "1.3.1.RELEASE"
300+ "applicationProperties":
301+ "spring.metrics.export.triggers.application.includes": "integration**"
302+ "spring.cloud.dataflow.stream.app.label": "time"
303+ "spring.cloud.stream.metrics.key": "ticktock.time.${spring.cloud.application.guid}"
304+ "spring.cloud.stream.bindings.output.producer.requiredGroups": "ticktock"
305+ "spring.cloud.stream.metrics.properties": "spring.application.name,spring.application.index,spring.cloud.application.*,spring.cloud.dataflow.*"
306+ "spring.cloud.stream.bindings.output.destination": "ticktock.time"
307+ "spring.cloud.dataflow.stream.name": "ticktock"
308+ "spring.cloud.dataflow.stream.app.type": "source"
309+ "deploymentProperties":
310+ "spring.cloud.deployer.group": "ticktock"
311+ ---
312+ "apiVersion": "skipper.spring.io/v1"
313+ "kind": "SpringCloudDeployerApplication"
314+ "metadata":
315+ "name": "log"
316+ "spec":
317+ "resource": "maven://org.springframework.cloud.stream.app:log-sink-rabbit"
318+ "resourceMetadata": "maven://org.springframework.cloud.stream.app:log-sink-rabbit:jar:metadata:1.3.1.RELEASE"
319+ "version": "1.3.1.RELEASE"
320+ "applicationProperties":
321+ "spring.metrics.export.triggers.application.includes": "integration**"
322+ "spring.cloud.dataflow.stream.app.label": "log"
323+ "spring.cloud.stream.metrics.key": "ticktock.log.${spring.cloud.application.guid}"
324+ "spring.cloud.stream.bindings.input.group": "ticktock"
325+ "log.name": "mylogger"
326+ "spring.cloud.stream.metrics.properties": "spring.application.name,spring.application.index,spring.cloud.application.*,spring.cloud.dataflow.*"
327+ "spring.cloud.dataflow.stream.name": "ticktock"
328+ "spring.cloud.dataflow.stream.app.type": "sink"
329+ "foo2": "bar2" <1>
330+ "spring.cloud.stream.bindings.input.destination": "ticktock.time"
331+ "foo3": "bar4" <1>
332+ "deploymentProperties":
333+ "spring.cloud.deployer.count": "1"
334+ "spring.cloud.deployer.group": "ticktock"
335+ ----
336+
337+ <1> The property `foo3` is replaced with the new value` bar4` and the existing property `foo2=bar2` remains.
338+
99339=== Stream History
100340
101341The history of the stream can be viewed by running the `stream history` command, as shown (with its output), in the following example:
0 commit comments