1313import java .util .Arrays ;
1414import java .util .Collections ;
1515import java .util .Comparator ;
16- import java .util .HashMap ;
1716import java .util .HashSet ;
1817import java .util .List ;
1918import java .util .Map ;
@@ -62,7 +61,7 @@ public class DevServicesProcessor {
6261
6362 static volatile ConsoleStateManager .ConsoleContext context ;
6463 static volatile boolean logForwardEnabled = false ;
65- static Map < String , ContainerLogForwarder > containerLogForwarders = new HashMap <>();
64+ static Set < ContainerLogForwarder > containerLogForwarders = new HashSet <>();
6665
6766 @ BuildStep
6867 public DevServicesNetworkIdBuildItem networkId (
@@ -110,15 +109,14 @@ public List<DevServiceDescriptionBuildItem> config(
110109 LaunchModeBuildItem launchModeBuildItem ,
111110 Optional <DevServicesLauncherConfigResultBuildItem > devServicesLauncherConfig ,
112111 List <DevServicesResultBuildItem > devServicesResults ) {
112+ containerLogForwarders .clear ();
113113 List <DevServiceDescriptionBuildItem > serviceDescriptions = buildServiceDescriptions (
114114 dockerStatusBuildItem , devServicesResults , devServicesLauncherConfig );
115115
116116 for (DevServiceDescriptionBuildItem devService : serviceDescriptions ) {
117- if (devService .hasContainerInfo ()) {
118- containerLogForwarders .compute (devService .getContainerInfo ().id (),
119- (id , forwarder ) -> Objects .requireNonNullElseGet (forwarder ,
120- () -> new ContainerLogForwarder (devService )));
121- }
117+
118+ containerLogForwarders .add (new ContainerLogForwarder (devService ));
119+
122120 }
123121
124122 // Build commands if we are in local dev mode
@@ -131,11 +129,11 @@ public List<DevServiceDescriptionBuildItem> config(
131129
132130 // Dev UI Log stream
133131 for (DevServiceDescriptionBuildItem service : serviceDescriptions ) {
134- if ( service . getContainerInfo () != null ) {
135- footerLogProducer .produce (new FooterLogBuildItem (service .getName (), () -> {
136- return createLogPublisher ( service .getContainerInfo (). id () );
137- }) );
138- }
132+
133+ footerLogProducer .produce (new FooterLogBuildItem (service .getName (), () -> {
134+ ContainerInfo containerInfo = service .getContainerInfo ();
135+ return createLogPublisher ( containerInfo );
136+ }));
139137 }
140138
141139 if (context == null ) {
@@ -162,22 +160,28 @@ public List<DevServiceDescriptionBuildItem> config(
162160 return serviceDescriptions ;
163161 }
164162
165- private Flow .Publisher <String > createLogPublisher (String containerId ) {
163+ private Flow .Publisher <String > createLogPublisher (ContainerInfo containerInfo ) {
164+
166165 try (FrameConsumerResultCallback resultCallback = new FrameConsumerResultCallback ()) {
167166 SubmissionPublisher <String > publisher = new SubmissionPublisher <>();
168167 resultCallback .addConsumer (OutputFrame .OutputType .STDERR ,
169168 frame -> publisher .submit (frame .getUtf8String ()));
170169 resultCallback .addConsumer (OutputFrame .OutputType .STDOUT ,
171170 frame -> publisher .submit (frame .getUtf8String ()));
172- LogContainerCmd logCmd = DockerClientFactory .lazyClient ()
173- .logContainerCmd (containerId )
174- .withFollowStream (true )
175- .withTailAll ()
176- .withStdErr (true )
177- .withStdOut (true );
178- logCmd .exec (resultCallback );
171+ if (containerInfo != null ) {
172+ String containerId = containerInfo .id ();
173+ LogContainerCmd logCmd = DockerClientFactory .lazyClient ()
174+ .logContainerCmd (containerId )
175+ .withFollowStream (true )
176+ .withTailAll ()
177+ .withStdErr (true )
178+ .withStdOut (true );
179+ logCmd .exec (resultCallback );
180+ }
179181
180182 return publisher ;
183+ } catch (RuntimeException re ) {
184+ throw re ;
181185 } catch (Exception e ) {
182186 throw new RuntimeException (e );
183187 }
@@ -259,14 +263,14 @@ private ContainerInfo.ContainerPort[] getExposedPorts(Container container) {
259263
260264 private synchronized void toggleLogForwarders () {
261265 if (logForwardEnabled ) {
262- for (ContainerLogForwarder logForwarder : containerLogForwarders . values () ) {
266+ for (ContainerLogForwarder logForwarder : containerLogForwarders ) {
263267 if (logForwarder .isRunning ()) {
264268 logForwarder .close ();
265269 }
266270 }
267271 logForwardEnabled = false ;
268272 } else {
269- for (ContainerLogForwarder logForwarder : containerLogForwarders . values () ) {
273+ for (ContainerLogForwarder logForwarder : containerLogForwarders ) {
270274 logForwarder .start ();
271275 }
272276 logForwardEnabled = true ;
0 commit comments