Skip to content
This repository was archived by the owner on Apr 5, 2022. It is now read-only.

Commit 427aaeb

Browse files
committed
SHDP-371 Update boot and core
- Boot from 1.1.0 to 1.1.5. Fix Map handling in config properties in SpringYarnClientLocalizerProperties. - Core from 4.1.0.RC1 to 4.1.0.RC2. Fix bean autowiring in YarnAppmasterAutoConfiguration by not define a bean in a same @configuration class which tries to autowire beans by its interface.
1 parent a9fbde4 commit 427aaeb

File tree

6 files changed

+71
-20
lines changed

6 files changed

+71
-20
lines changed

gradle.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,9 @@ defaultPigVersion = 0.10.1
5757
defaultHbaseVersion = 0.94.11
5858

5959
## Common libraries
60-
springVersion = 4.1.0.RC1
60+
springVersion = 4.1.0.RC2
6161
springBatchVersion = 3.0.1.RELEASE
62-
springBootVersion = 1.1.0.RELEASE
62+
springBootVersion = 1.1.5.RELEASE
6363
springIntVersion = 4.0.3.RELEASE
6464
jacksonVersion = 1.9.13
6565
jackson2Version = 2.4.2

spring-yarn/spring-yarn-batch/src/test/java/org/springframework/yarn/batch/support/YarnJobLauncherTests.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
*/
1616
package org.springframework.yarn.batch.support;
1717

18+
import static org.junit.Assert.assertEquals;
19+
1820
import java.util.ArrayList;
1921
import java.util.Arrays;
2022

@@ -41,14 +43,11 @@
4143
import org.springframework.batch.repeat.RepeatStatus;
4244
import org.springframework.batch.support.transaction.ResourcelessTransactionManager;
4345
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
44-
import org.springframework.context.annotation.Bean;
4546
import org.springframework.context.annotation.Configuration;
4647
import org.springframework.core.task.SyncTaskExecutor;
4748
import org.springframework.transaction.PlatformTransactionManager;
4849
import org.springframework.yarn.batch.support.YarnBatchProperties.JobProperties;
4950

50-
import static org.junit.Assert.assertEquals;
51-
5251
/**
5352
* Tests for {@link YarnJobLauncher}.
5453
*

spring-yarn/spring-yarn-boot/src/main/java/org/springframework/yarn/boot/YarnAppmasterAutoConfiguration.java

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,20 @@ public YarnJobLauncher yarnJobLauncher() {
218218

219219
}
220220

221+
@Configuration
222+
@ConditionalOnExpression("${spring.yarn.appmaster.containercluster.enabled:false}")
223+
public static class ContainerClusterFactoryConfig {
224+
225+
@Bean
226+
@ConditionalOnMissingBean(name = "defaultGridProjectionFactory")
227+
public GridProjectionFactory defaultGridProjectionFactory() {
228+
// on its own @Configuration class because we
229+
// autowire in ContainerClusterConfig
230+
return new DefaultGridProjectionFactory();
231+
}
232+
233+
}
234+
221235
@Configuration
222236
@EnableConfigurationProperties({ SpringYarnAppmasterProperties.class })
223237
@ConditionalOnExpression("${spring.yarn.appmaster.containercluster.enabled:false}")
@@ -229,12 +243,6 @@ public static class ContainerClusterConfig {
229243
@Autowired(required = false)
230244
private List<GridProjectionFactory> gridProjectionFactories;
231245

232-
@Bean
233-
@ConditionalOnMissingBean(name = "defaultGridProjectionFactory")
234-
public GridProjectionFactory defaultGridProjectionFactory() {
235-
return new DefaultGridProjectionFactory();
236-
}
237-
238246
@Bean
239247
public GridProjectionFactoryLocator gridProjectionFactoryLocator() {
240248
GridProjectionFactoryRegistry registry = new GridProjectionFactoryRegistry();

spring-yarn/spring-yarn-boot/src/main/java/org/springframework/yarn/boot/YarnClientAutoConfiguration.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
*/
1616
package org.springframework.yarn.boot;
1717

18+
import java.util.HashMap;
19+
import java.util.Map;
1820
import java.util.Properties;
1921

2022
import org.springframework.beans.factory.annotation.Autowired;
@@ -160,7 +162,7 @@ public void configure(YarnResourceLocalizerConfigurer localizer) throws Exceptio
160162
.stagingDirectory(syp.getStagingDir())
161163
.withCopy()
162164
.copy(StringUtils.toStringArray(sycp.getFiles()), applicationDir, applicationDir == null)
163-
.raw(syclp.getRawFileContents(), applicationDir);
165+
.raw(unescapeMapKeys(syclp.getRawFileContents()), applicationDir);
164166

165167
LocalResourcesHdfsConfigurer withHdfs = localizer.withHdfs();
166168
for (Entry e : localResourcesSelector.select(applicationDir != null ? applicationDir : "/")) {
@@ -233,4 +235,15 @@ private static String[] createMasterCommands(SpringYarnClientLaunchContextProper
233235
return factory.getObject();
234236
}
235237

238+
private static Map<String, byte[]> unescapeMapKeys(Map<String, byte[]> map) {
239+
if (map == null || map.isEmpty()) {
240+
return map;
241+
}
242+
HashMap<String, byte[]> nmap = new HashMap<String, byte[]>();
243+
for (String key : map.keySet()) {
244+
nmap.put(SpringYarnBootUtils.unescapeConfigKey(key), map.get(key));
245+
}
246+
return nmap;
247+
}
248+
236249
}

spring-yarn/spring-yarn-boot/src/main/java/org/springframework/yarn/boot/support/SpringYarnBootUtils.java

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020
import java.util.ArrayList;
2121
import java.util.HashMap;
2222
import java.util.Map;
23-
import java.util.Properties;
2423
import java.util.Map.Entry;
24+
import java.util.Properties;
2525

2626
import org.springframework.boot.builder.SpringApplicationBuilder;
2727
import org.springframework.util.Assert;
@@ -117,21 +117,27 @@ public static void addConfigFilesContents(SpringApplicationBuilder builder, Map<
117117
if (configFilesContents == null) {
118118
return;
119119
}
120-
Map<String, byte[]> content = new HashMap<String, byte[]>();
120+
Map<String, Object> defaultProperties = new HashMap<String, Object>();
121121
for (Entry<String, Properties> entry : configFilesContents.entrySet()) {
122122
try {
123123
ByteArrayOutputStream out = new ByteArrayOutputStream();
124124
entry.getValue().store(out, null);
125-
content.put(entry.getKey(), out.toByteArray());
125+
defaultProperties.put(
126+
"spring.yarn.client.localizer.rawFileContents."
127+
+ SpringYarnBootUtils.escapeConfigKey(entry.getKey()), out.toByteArray());
126128
} catch (IOException e) {
127129
// suppress because this should not happen
128130
}
129131
}
130-
if (!content.isEmpty()) {
131-
Properties p = new Properties();
132-
p.put("spring.yarn.client.localizer.rawFileContents", content);
133-
builder.properties(p);
134-
}
132+
builder.properties(defaultProperties);
133+
}
134+
135+
public static String escapeConfigKey(String key) {
136+
return StringUtils.replace(key, ".", "%2E");
137+
}
138+
139+
public static String unescapeConfigKey(String key) {
140+
return StringUtils.replace(key, "%2E", ".");
135141
}
136142

137143
public static String resolveApplicationdir(SpringYarnProperties syp) {

spring-yarn/spring-yarn-boot/src/test/java/org/springframework/yarn/boot/properties/SpringYarnClientLocalizerPropertiesTests.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,15 @@
2020
import static org.junit.Assert.assertThat;
2121

2222
import java.util.List;
23+
import java.util.Properties;
2324

2425
import org.junit.Test;
2526
import org.springframework.boot.SpringApplication;
27+
import org.springframework.boot.builder.SpringApplicationBuilder;
2628
import org.springframework.boot.context.properties.EnableConfigurationProperties;
2729
import org.springframework.context.ConfigurableApplicationContext;
2830
import org.springframework.context.annotation.Configuration;
31+
import org.springframework.yarn.boot.support.SpringYarnBootUtils;
2932

3033
public class SpringYarnClientLocalizerPropertiesTests {
3134

@@ -61,6 +64,28 @@ public void testAllPropertiesSet() {
6164
context.close();
6265
}
6366

67+
@Test
68+
public void testRawFileContents() {
69+
SpringApplicationBuilder builder = new SpringApplicationBuilder(TestConfiguration.class);
70+
71+
Properties p = new Properties();
72+
p.put("spring.yarn.client.localizer.rawFileContents." + SpringYarnBootUtils.escapeConfigKey("file1"), new byte[1]);
73+
p.put("spring.yarn.client.localizer.rawFileContents." + SpringYarnBootUtils.escapeConfigKey("file2"), new byte[2]);
74+
p.put("spring.yarn.client.localizer.rawFileContents." + SpringYarnBootUtils.escapeConfigKey("application.properties"), new byte[3]);
75+
builder.properties(p);
76+
77+
SpringApplication app = builder.application();
78+
app.setWebEnvironment(false);
79+
ConfigurableApplicationContext context = app.run(new String[0]);
80+
SpringYarnClientLocalizerProperties properties = context.getBean(SpringYarnClientLocalizerProperties.class);
81+
assertThat(properties, notNullValue());
82+
assertThat(properties.getRawFileContents(), notNullValue());
83+
assertThat(properties.getRawFileContents().size(), is(3));
84+
assertThat(properties.getRawFileContents().get(SpringYarnBootUtils.escapeConfigKey("file1")).length, is(1));
85+
assertThat(properties.getRawFileContents().get(SpringYarnBootUtils.escapeConfigKey("file2")).length, is(2));
86+
assertThat(properties.getRawFileContents().get(SpringYarnBootUtils.escapeConfigKey("application.properties")).length, is(3));
87+
}
88+
6489
@Configuration
6590
@EnableConfigurationProperties({SpringYarnClientLocalizerProperties.class})
6691
protected static class TestConfiguration {

0 commit comments

Comments
 (0)