44
44
import org .opensearch .cluster .metadata .MetadataIndexTemplateService ;
45
45
import org .opensearch .cluster .metadata .Template ;
46
46
import org .opensearch .cluster .service .ClusterService ;
47
+ import org .opensearch .common .compress .CompressedXContent ;
47
48
import org .opensearch .common .inject .Inject ;
48
49
import org .opensearch .common .settings .IndexScopedSettings ;
49
50
import org .opensearch .common .settings .Settings ;
50
51
import org .opensearch .core .action .ActionListener ;
51
52
import org .opensearch .core .common .io .stream .StreamInput ;
53
+ import org .opensearch .index .mapper .MappingTransformerRegistry ;
52
54
import org .opensearch .threadpool .ThreadPool ;
53
55
import org .opensearch .transport .TransportService ;
54
56
55
57
import java .io .IOException ;
56
58
59
+ import reactor .util .annotation .NonNull ;
60
+
57
61
/**
58
62
* An action for putting a single component template into the cluster state
59
63
*
@@ -65,6 +69,7 @@ public class TransportPutComponentTemplateAction extends TransportClusterManager
65
69
66
70
private final MetadataIndexTemplateService indexTemplateService ;
67
71
private final IndexScopedSettings indexScopedSettings ;
72
+ private final MappingTransformerRegistry mappingTransformerRegistry ;
68
73
69
74
@ Inject
70
75
public TransportPutComponentTemplateAction (
@@ -74,7 +79,8 @@ public TransportPutComponentTemplateAction(
74
79
MetadataIndexTemplateService indexTemplateService ,
75
80
ActionFilters actionFilters ,
76
81
IndexNameExpressionResolver indexNameExpressionResolver ,
77
- IndexScopedSettings indexScopedSettings
82
+ IndexScopedSettings indexScopedSettings ,
83
+ MappingTransformerRegistry mappingTransformerRegistry
78
84
) {
79
85
super (
80
86
PutComponentTemplateAction .NAME ,
@@ -87,6 +93,7 @@ public TransportPutComponentTemplateAction(
87
93
);
88
94
this .indexTemplateService = indexTemplateService ;
89
95
this .indexScopedSettings = indexScopedSettings ;
96
+ this .mappingTransformerRegistry = mappingTransformerRegistry ;
90
97
}
91
98
92
99
@ Override
@@ -121,13 +128,38 @@ protected void clusterManagerOperation(
121
128
template = new Template (settings , template .mappings (), template .aliases ());
122
129
componentTemplate = new ComponentTemplate (template , componentTemplate .version (), componentTemplate .metadata ());
123
130
}
124
- indexTemplateService .putComponentTemplate (
125
- request .cause (),
126
- request .create (),
127
- request .name (),
128
- request .clusterManagerNodeTimeout (),
129
- componentTemplate ,
130
- listener
131
- );
131
+
132
+ final ActionListener <String > mappingTransformListener = getMappingTransformListener (request , listener , componentTemplate );
133
+
134
+ transformMapping (template , mappingTransformListener );
135
+
136
+ }
137
+
138
+ private ActionListener <String > getMappingTransformListener (
139
+ final PutComponentTemplateAction .Request request ,
140
+ final ActionListener <AcknowledgedResponse > listener ,
141
+ final ComponentTemplate componentTemplate
142
+ ) {
143
+ return ActionListener .wrap (transformedMappings -> {
144
+ if (transformedMappings != null ) {
145
+ componentTemplate .template ().setMappings (new CompressedXContent (transformedMappings ));
146
+ }
147
+ indexTemplateService .putComponentTemplate (
148
+ request .cause (),
149
+ request .create (),
150
+ request .name (),
151
+ request .clusterManagerNodeTimeout (),
152
+ componentTemplate ,
153
+ listener
154
+ );
155
+ }, e -> { throw (RuntimeException ) e ; });
156
+ }
157
+
158
+ private void transformMapping (@ NonNull final Template template , @ NonNull final ActionListener <String > mappingTransformListener ) {
159
+ if (template == null || template .mappings () == null ) {
160
+ mappingTransformListener .onResponse (null );
161
+ } else {
162
+ mappingTransformerRegistry .applyTransformers (template .mappings ().string (), null , mappingTransformListener );
163
+ }
132
164
}
133
165
}
0 commit comments