@@ -136,15 +136,28 @@ internal class VitessSchemaApplier(
136136 val ddlUpdates = ConcurrentLinkedQueue <DdlUpdate >()
137137 val vschemaUpdates = ConcurrentLinkedQueue <VSchemaUpdate >()
138138
139- // Run all keyspace operations in parallel to speed up schema change processing.
140- val executorService = Executors .newFixedThreadPool(keyspaces.size)
139+ // Apply VSchemas in parallel but wait for all to complete before proceeding to DDL's.
140+ val vschemaExecutorService = Executors .newFixedThreadPool(keyspaces.size)
141+ val vschemaFutures = mutableListOf<Future <VSchemaUpdate >>()
142+
143+ keyspaces.forEach { keyspace ->
144+ vschemaFutures.add(
145+ vschemaExecutorService.submit<VSchemaUpdate > {
146+ processVschema(keyspace)
147+ }
148+ )
149+ }
150+
151+ vschemaFutures.forEach { future ->
152+ vschemaUpdates.add(future.get())
153+ }
154+ vschemaExecutorService.shutdown()
155+
156+ val ddlExecutorService = Executors .newFixedThreadPool(keyspaces.size)
141157 val futures = mutableListOf<Future <Unit >>()
142158 keyspaces.forEach { keyspace ->
143159 futures.add(
144- executorService.submit<Unit > {
145- val vschemaUpdate = processVschema(keyspace)
146- vschemaUpdates.add(vschemaUpdate)
147-
160+ ddlExecutorService.submit<Unit > {
148161 var schemaChangesProcessedForKeyspace: Boolean
149162 if (enableDeclarativeSchemaChanges) {
150163 schemaChangesProcessedForKeyspace = applyDeclarativeSchemaChanges(keyspace, vitessQueryExecutor, ddlUpdates)
@@ -161,7 +174,7 @@ internal class VitessSchemaApplier(
161174 }
162175
163176 futures.forEach { it.get() }
164- executorService .shutdown()
177+ ddlExecutorService .shutdown()
165178
166179 initializeSequenceTables(vitessQueryExecutor)
167180 println (" 🔧 Schema is applied." )
@@ -236,9 +249,9 @@ internal class VitessSchemaApplier(
236249 keyspace.ddlCommands
237250 .sortedBy { it.first }
238251 .map { it.second }
239- .forEach {
240- vitessQueryExecutor.executeUpdate(query = it, target = keyspace.name)
241- ddlUpdates.add(DdlUpdate (ddl = it , keyspace = keyspace.name))
252+ .forEach { ddl ->
253+ vitessQueryExecutor.executeUpdateWithRetries(ddl, keyspace.name)
254+ ddlUpdates.add(DdlUpdate (ddl = ddl , keyspace = keyspace.name))
242255 }
243256
244257 return true
@@ -286,7 +299,7 @@ internal class VitessSchemaApplier(
286299
287300 private fun applyDdlCommands (ddl : String , keyspace : VitessKeyspace , vitessQueryExecutor : VitessQueryExecutor ) {
288301 printDebug(" Applying schema changes:\n $ddl " )
289- vitessQueryExecutor.executeUpdate (ddl, keyspace.name)
302+ vitessQueryExecutor.executeUpdateWithRetries (ddl, keyspace.name)
290303 }
291304
292305 private fun executeDockerCommand (command : List <String >, keyspace : String ): String {
0 commit comments