@@ -301,8 +301,7 @@ public synchronized GoConfigSaveResult writeWithLock(UpdateConfigCommand updatin
301301 List <PartialConfig > lastKnownPartials = cachedGoPartials .lastKnownPartials ();
302302 List <PartialConfig > lastValidPartials = cachedGoPartials .lastValidPartials ();
303303 try {
304- String configAsXml = trySavingConfig (updatingCommand , configHolder , lastKnownPartials );
305- validatedConfigHolder = internalLoad (configAsXml , getConfigUpdatingUser (updatingCommand ), lastKnownPartials );
304+ validatedConfigHolder = trySavingConfig (updatingCommand , configHolder , lastKnownPartials );
306305 updateMergedConfigForEdit (validatedConfigHolder , lastKnownPartials );
307306 } catch (Exception e ) {
308307 if (lastKnownPartials .isEmpty () || areKnownPartialsSameAsValidPartials (lastKnownPartials , lastValidPartials )) {
@@ -312,8 +311,7 @@ public synchronized GoConfigSaveResult writeWithLock(UpdateConfigCommand updatin
312311 "Merged config update operation failed on LATEST %s partials. Falling back to using LAST VALID %s partials. Exception message was: %s" ,
313312 lastKnownPartials .size (), lastValidPartials .size (), e .getMessage ()), e );
314313 try {
315- String configAsXml = trySavingConfig (updatingCommand , configHolder , lastValidPartials );
316- validatedConfigHolder = internalLoad (configAsXml , getConfigUpdatingUser (updatingCommand ), lastValidPartials );
314+ validatedConfigHolder = trySavingConfig (updatingCommand , configHolder , lastValidPartials );
317315 updateMergedConfigForEdit (validatedConfigHolder , lastValidPartials );
318316 LOGGER .info (String .format ("Update operation on merged configuration succeeded with old %s LAST VALID partials." , lastValidPartials .size ()));
319317 } catch (GoConfigInvalidException fallbackFailed ) {
@@ -366,25 +364,35 @@ private void updateMergedConfigForEdit(GoConfigHolder validatedConfigHolder, Lis
366364 validatedConfigHolder .mergedConfigForEdit = mergedCruiseConfigForEdit ;
367365 }
368366
369- private String trySavingConfig (UpdateConfigCommand updatingCommand , GoConfigHolder configHolder , List <PartialConfig > partials ) throws Exception {
370- String configAsXml = getModifiedConfig (updatingCommand , configHolder , partials );
367+ private GoConfigHolder trySavingConfig (UpdateConfigCommand updatingCommand , GoConfigHolder configHolder , List <PartialConfig > partials ) throws Exception {
368+ String configAsXml ;
369+ GoConfigHolder validatedConfigHolder ;
370+ LOGGER .debug ("[Config Save] ==-- Getting modified config" );
371+ if (shouldMergeConfig (updatingCommand , configHolder )) {
372+ if (!systemEnvironment .get (SystemEnvironment .ENABLE_CONFIG_MERGE_FEATURE )) {
373+ throw new ConfigMergeException (ConfigFileHasChangedException .CONFIG_CHANGED_PLEASE_REFRESH );
374+ }
375+ configAsXml = getMergedConfig ((NoOverwriteUpdateConfigCommand ) updatingCommand , configHolder .configForEdit .getMd5 (), partials );
376+ try {
377+ validatedConfigHolder = internalLoad (configAsXml , getConfigUpdatingUser (updatingCommand ), partials );
378+ } catch (Exception e ) {
379+ LOGGER .info (format ("[CONFIG_MERGE] Post merge validation failed, latest-md5: %s" , configHolder .configForEdit .getMd5 ()));
380+ throw new ConfigMergePostValidationException (e .getMessage (), e );
381+ }
382+ } else {
383+ configAsXml = getUnmergedConfig (updatingCommand , configHolder , partials );
384+ validatedConfigHolder = internalLoad (configAsXml , getConfigUpdatingUser (updatingCommand ), partials );
385+ }
371386 LOGGER .info (String .format ("[Configuration Changed] Saving updated configuration." ));
372387 writeToConfigXmlFile (configAsXml );
373- return configAsXml ;
388+ return validatedConfigHolder ;
374389 }
375390
376391 private ConfigModifyingUser getConfigUpdatingUser (UpdateConfigCommand updatingCommand ) {
377392 return updatingCommand instanceof UserAware ? ((UserAware ) updatingCommand ).user () : new ConfigModifyingUser ();
378393 }
379394
380- private String getModifiedConfig (UpdateConfigCommand updatingCommand , GoConfigHolder configHolder , List <PartialConfig > partials ) throws Exception {
381- LOGGER .debug ("[Config Save] ==-- Getting modified config" );
382- if (shouldMergeConfig (updatingCommand , configHolder )) {
383- if (!systemEnvironment .get (SystemEnvironment .ENABLE_CONFIG_MERGE_FEATURE )) {
384- throw new ConfigMergeException (ConfigFileHasChangedException .CONFIG_CHANGED_PLEASE_REFRESH );
385- }
386- return getMergedConfig ((NoOverwriteUpdateConfigCommand ) updatingCommand , configHolder .configForEdit .getMd5 (), partials );
387- }
395+ private String getUnmergedConfig (UpdateConfigCommand updatingCommand , GoConfigHolder configHolder , List <PartialConfig > partials ) throws Exception {
388396 CruiseConfig deepCloneForEdit = cloner .deepClone (configHolder .configForEdit );
389397 deepCloneForEdit .setPartials (partials );
390398 CruiseConfig config = updatingCommand .update (deepCloneForEdit );
@@ -416,27 +424,10 @@ private String getMergedConfig(NoOverwriteUpdateConfigCommand noOverwriteCommand
416424 serverVersion .version (), timeProvider );
417425
418426 String mergedConfigXml = configRepository .getConfigMergedWithLatestRevision (configRevision , oldMd5 );
419- validateMergedXML ( mergedConfigXml , latestMd5 , partials );
427+ LOGGER . debug ( "[Config Save] -=- Done converting merged config to XML" );
420428 return mergedConfigXml ;
421429 }
422430
423- private CruiseConfig validateMergedXML (String mergedConfigXml , String latestMd5 , final List <PartialConfig > partials ) throws Exception {
424- LOGGER .debug ("[Config Save] -=- Converting merged config to XML" );
425- try {
426- return magicalGoConfigXmlLoader .loadConfigHolder (mergedConfigXml , new MagicalGoConfigXmlLoader .Callback () {
427- @ Override
428- public void call (CruiseConfig cruiseConfig ) {
429- cruiseConfig .setPartials (partials );
430- }
431- }).configForEdit ;
432- } catch (Exception e ) {
433- LOGGER .info (format ("[CONFIG_MERGE] Post merge validation failed, latest-md5: %s" , latestMd5 ));
434- throw new ConfigMergePostValidationException (e .getMessage (), e );
435- } finally {
436- LOGGER .debug ("[Config Save] -=- Done converting merged config to XML" );
437- }
438- }
439-
440431 private String convertMutatedConfigToXml (CruiseConfig modifiedConfig , String latestMd5 ) throws Exception {
441432 try {
442433 return configAsXml (modifiedConfig , false );
0 commit comments