Skip to content

Commit 1622dd9

Browse files
Jira:WDT-346 fix reported issue and other known problems with dynamic cluster targeting
1 parent 3058d27 commit 1622dd9

File tree

5 files changed

+100
-47
lines changed

5 files changed

+100
-47
lines changed

KnownIssues.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,18 @@
11
The following list are known issues. The issue may contain a work-around or an associated Issue number.
22

3+
**ISSUE**:
4+
The createDomain tool does not target non-JRF product resources to dynamic clusters.
5+
WebLogic WLST will not assign resources associated with extension template or custom template user server groups
6+
to dynamic clusters or dynamic servers. The createDomain can target any resources associated to JRF
7+
related user server groups using the FMW WLST extension function applyJRF.
8+
9+
**ACTION**:
10+
1. Contact WebLogic support concerning the inability to target non-JRF resources to a dynamic cluster.
11+
2. Manually target the resources to the dynamic cluster.
12+
3. Add a configured managed server to your dynamic cluster. The dynamic cluster will become a "mixed" cluster. The
13+
extension template or custom template resources will then be targeted to both the managed server and the
14+
dynamic servers in the mixed cluster.
15+
316
**ISSUE**:
417
The discoverDomain STDOUT contains many SEVERE messages about cd() and ls() when it is run against a 12.2.1 domain.
518
The discover tool navigates through the domain MBeans using wlst to determine which MBeans are present in a

core/src/main/python/wlsdeploy/tool/create/domain_creator.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -484,13 +484,13 @@ def __create_domain_with_select_template(self, domain_home):
484484

485485
server_groups_to_target = self._domain_typedef.get_server_groups_to_target()
486486
server_assigns, dynamic_assigns = self.target_helper.target_server_groups_to_servers(server_groups_to_target)
487-
if server_assigns is not None:
487+
if len(server_assigns) > 0:
488488
self.target_helper.target_server_groups(server_assigns)
489489

490490
self.wlst_helper.write_domain(domain_home)
491491
self.wlst_helper.close_template()
492492

493-
if dynamic_assigns is not None:
493+
if len(dynamic_assigns) > 0:
494494
self.target_helper.target_server_groups_to_dynamic_clusters(dynamic_assigns)
495495

496496
self.logger.exiting(class_name=self.__class_name, method_name=_method_name)

core/src/main/python/wlsdeploy/tool/deploy/topology_updater.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,11 +129,11 @@ def update(self):
129129
server_groups_to_target = self._domain_typedef.get_server_groups_to_target()
130130
server_assigns, dynamic_assigns = \
131131
self.target_helper.target_server_groups_to_servers(server_groups_to_target)
132-
if dynamic_assigns is not None:
132+
if len(dynamic_assigns) > 0:
133133
self.wlst_helper.save_and_close(self.model_context)
134134
self.target_helper.target_server_groups_to_dynamic_clusters(dynamic_assigns)
135135
self.wlst_helper.reopen(self.model_context)
136-
if server_assigns is not None:
136+
if len(server_assigns) > 0:
137137
self.target_helper.target_server_groups(server_assigns)
138138
elif self._domain_typedef.is_jrf_domain_type():
139139
self.target_helper.target_jrf_groups_to_clusters_servers()

core/src/main/python/wlsdeploy/tool/util/target_helper.py

Lines changed: 78 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
"""
55

66
import copy
7-
import oracle.weblogic.deploy.util.StringUtils as StringUtils
7+
8+
import java.lang.Boolean as Boolean
9+
810
import oracle.weblogic.deploy.util.PyOrderedDict as OrderedDict
911
import wlsdeploy.util.dictionary_utils as dictionary_utils
1012

@@ -140,32 +142,52 @@ def target_server_groups_to_servers(self, server_groups_to_target):
140142
method_name=_method_name)
141143

142144
final_assignment_map = dict()
143-
if len(server_names) > 0:
145+
dynamic_cluster_assigns = dict()
146+
# Target servers and dynamic clusters to the server group resources
147+
if len(server_names) > 0 or len(dynamic_cluster_names) > 0:
144148
for server, server_groups in server_to_server_groups_map.iteritems():
145-
if server in server_names and len(server_groups) > 0:
146-
final_assignment_map[server] = server_groups
147-
148-
elif len(server_names) == 0 and len(dynamic_cluster_names) == 0:
149-
#
150-
# Domain has no managed servers and there were not targeting limits specified to target
151-
# server groups to the admin server so make sure that the server groups are targeted to
152-
# the admin server.
153-
#
154-
# This is really a best effort attempt. It works for JRF domains but it is certainly possible
155-
# that it may cause problems with other custom domain types. Of course, creating a domain with
156-
# no managed servers is not a primary use case of this tool so do it and hope for the best...
157-
#
158-
final_assignment_map[server_names[0]] = server_groups_to_target
159-
160-
# Target any dynamic clusters to the server group resources
161-
dynamic_cluster_assigns = None
162-
if len(dynamic_cluster_names) > 0:
163-
dynamic_cluster_assigns = dict()
164-
for name in dynamic_cluster_names:
165-
if name in server_to_server_groups_map:
166-
dynamic_cluster_assigns[name] = server_to_server_groups_map[name]
167-
168-
self.logger.exiting(result=str(dynamic_cluster_assigns), class_name=self.__class_name, method_name=_method_name)
149+
if len(server_groups) > 0:
150+
if server in server_names:
151+
final_assignment_map[server] = server_groups
152+
elif server in dynamic_cluster_names:
153+
dynamic_cluster_assigns[server] = server_groups
154+
155+
#
156+
# Domain has not targeted the server groups to managed servers (configured), or the
157+
# domain has no managed servers (configured) but has user server groups. The resources for the
158+
# user server groups must be targeted before the write/update domain or the write/update will fail.
159+
# Thus assign the user server groups to the admin server.
160+
#
161+
# Because of the interaction of the working context in the different wlst helpers, the dynamic
162+
# clusters will be applied to the resources separately and after the write/update domain.
163+
#
164+
# (From original blurb)
165+
# This is really a best effort attempt. It works for JRF domains but it is certainly possible
166+
# that it may cause problems with other custom domain types. Of course, creating a domain with
167+
# no managed servers is not a primary use case of this tool so do it and hope for the best...
168+
#
169+
# (New comment)
170+
# As we have added the intricacies of the dynamic clusters, if the targeting is to dynamic
171+
# clusters only, the set server groups with the admin server will get through the write/update domain
172+
# and the applyJRF with the dynamic cluster should theoretically unset the AdminServer on the user server
173+
# groups. It works with JRF type domains.
174+
175+
if len(server_groups_to_target) > 0:
176+
if len(final_assignment_map) == 0:
177+
# This is a quickie to fix the issue where server groups are not targeted because no configured
178+
# managed servers exist in the domain
179+
final_assignment_map[server_names[0]] = server_groups_to_target
180+
else:
181+
# If a server group or groups is not targeted in the assignments, log it to stdout
182+
no_targets = [server_target for server_target in server_groups_to_target if server_target not in
183+
[server_target for row in final_assignment_map.itervalues() for
184+
server_target in server_groups_to_target if server_target in row]]
185+
if len(no_targets) > 0:
186+
self.logger.info('WLSDPLY-12248', no_targets,
187+
class_name=self.__class_name, method_name=_method_name)
188+
189+
self.logger.exiting(result=str(dynamic_cluster_assigns),
190+
class_name=self.__class_name, method_name=_method_name)
169191
return final_assignment_map, dynamic_cluster_assigns
170192

171193
def target_server_groups(self, server_assigns):
@@ -200,15 +222,14 @@ def target_server_groups_to_dynamic_clusters(self, dynamic_cluster_assigns):
200222
domain_typedef = self.model_context.get_domain_typedef()
201223

202224
if len(dynamic_cluster_assigns) > 0:
225+
self.logger.info('WLSDPLY-12247', class_name=self.__class_name, method_name=_method_name)
203226
# TBD assign server group resources to cluster. The JRF resources could still be applied separately
204227
# using this technique - or remove this technique and replace with the resource targeting
205228
if domain_typedef.has_jrf_resources():
206229
self._target_jrf_resources(dynamic_cluster_assigns)
207230
else:
208-
ex = exception_helper.create_exception(self.exception_type, 'WLSDPLY-12238',
209-
domain_typedef.get_domain_type())
210-
self.logger.throwing(ex, class_name=self.__class_name, method_name=_method_name)
211-
raise ex
231+
self.logger.warning('WLSDPLY-12238', domain_typedef.get_domain_type(),
232+
class_name=self.__class_name, method_name=_method_name)
212233

213234
self.logger.exiting(class_name=self.__class_name, method_name=_method_name)
214235
return
@@ -357,7 +378,7 @@ def _get_server_group_targeting_limits(self, server_group_targeting_limits, clus
357378
if DYNAMIC_SERVERS in cluster_members:
358379
# This will need special handling to target server group resources
359380
cluster_members.remove(DYNAMIC_SERVERS)
360-
cluster_members.add(target_name)
381+
cluster_members.append(target_name)
361382
new_list.extend(cluster_members)
362383
else:
363384
# Assume it is a server name and add it to the new list
@@ -385,28 +406,47 @@ def _get_server_to_server_groups_map(self, admin_server_name, server_names, dyna
385406
self.logger.entering(admin_server_name, str(server_names), str(server_groups), str(sg_targeting_limits),
386407
class_name=self.__class_name, method_name=_method_name)
387408
result = OrderedDict()
409+
revised_server_groups = self._revised_list_server_groups(server_groups, sg_targeting_limits)
388410
for server_name in server_names:
389411
server_groups_for_server = self.__get_server_groups_for_entity(server_name, sg_targeting_limits)
390-
if server_groups_for_server is not None:
412+
if len(server_groups_for_server) > 0:
391413
result[server_name] = server_groups_for_server
392414
elif server_name != admin_server_name:
393415
# By default, we only target managed servers unless explicitly listed in the targeting limits
394-
result[server_name] = list(server_groups)
416+
result[server_name] = list(revised_server_groups)
395417
else:
396418
result[admin_server_name] = list()
397419
for cluster_name in dynamic_cluster_names:
398-
server_groups_for_cluster = self.__get_server_groups_for_entity(cluster_name, sg_targeting_limits)
399-
if server_groups_for_cluster is not None:
420+
server_groups_for_cluster = \
421+
self.__get_server_groups_for_entity(cluster_name, sg_targeting_limits)
422+
if len(server_groups_for_cluster) > 0:
400423
result[cluster_name] = server_groups_for_cluster
401424
else:
402-
result[cluster_name] = list(server_groups)
425+
result[cluster_name] = list(revised_server_groups)
403426
self.logger.finer('WLSDPLY-12239', result[cluster_name], cluster_name,
404427
class_name=self.__class_name, method_name=_method_name)
405428
if admin_server_name not in result:
406429
result[admin_server_name] = list()
407430
self.logger.exiting(class_name=self.__class_name, method_name=_method_name, result=result)
408431
return result
409432

433+
def _revised_list_server_groups(self, server_groups, sg_targeting_limits):
434+
"""
435+
Remove all server groups that are explicitly targeted to a cluster, server set or stand-alone
436+
managed server.
437+
:param server_groups: list of server groups applied by the extension templates
438+
:param sg_targeting_limits: list of targeting from the domainInfo section
439+
:return: server group list with the specific targeted server groups removed
440+
"""
441+
_method_name = '_revised_list_server_groups'
442+
self.logger.entering(sg_targeting_limits, class_name=self.__class_name, method_name=_method_name)
443+
result = list()
444+
targeted_server_groups = sg_targeting_limits.keys()
445+
for server_group in server_groups:
446+
if server_group not in targeted_server_groups:
447+
result.append(server_group)
448+
return result
449+
410450
def __get_server_groups_for_entity(self, entity_name, sg_targeting_limits):
411451
"""
412452
Get the servers groups to target for a given server or dynamic cluster name.
@@ -416,14 +456,11 @@ def __get_server_groups_for_entity(self, entity_name, sg_targeting_limits):
416456
if the entity name does not appear in the targeting limits
417457
"""
418458
_method_name = '__get_server_groups_for_entity'
419-
420-
result = None
459+
result = list()
421460
for server_group, entity_names_list in sg_targeting_limits.iteritems():
422461
if entity_name in entity_names_list:
423-
if result is None:
424-
result = list()
425462
result.append(server_group)
426-
if result is not None:
463+
if len(result) > 0:
427464
self.logger.fine('WLSDPLY-12243', entity_name, result, class_name=self.__class_name,
428465
method_name=_method_name)
429466
return result

core/src/main/resources/oracle/weblogic/deploy/messages/wlsdeploy_rb.properties

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1073,8 +1073,8 @@ WLSDPLY-12234=Unable to copy domain library {0} to directory {1}
10731073
WLSDPLY-12235=Installing domain library {0} to lib directory of {1}
10741074
WLSDPLY-12236=Target the JRF resources to the clusters with dynamic servers {0}
10751075
WLSDPLY-12237=Target the resources for server groups {0} to cluster {1} with dynamic server members
1076-
WLSDPLY-12238=Unable to target template server groups for domain type {0} to dynamic clusters. This will \
1077-
be available in a follow-up release of WebLogic Deploy Tooling.
1076+
WLSDPLY-12238=Unable to target non-JRF template server groups for domain type {0} to dynamic cluster(s).
1077+
10781078
WLSDPLY-12239=Found server groups {0} for cluster {1}
10791079
WLSDPLY-12240=Server group targeting limits {0} found in model
10801080
WLSDPLY-12242=The assignment of servers to server groups map is {0}
@@ -1083,6 +1083,9 @@ WLSDPLY-12244=Targeting JRF resources to a dynamic cluster(s), {0}, for a Restri
10831083
when updating in online mode
10841084
WLSDPLY-12245=Selecting custom extension template named {0}
10851085
WLSDPLY-12246=Adding custom extension template file {0} to domain
1086+
WLSDPLY-12247=WebLogic does not support targeting resources to dynamic servers. JRF product related resources \
1087+
will be targeted to the dynamic cluster using the applyJRF function.
1088+
WLSDPLY-12248=The server group(s) {0} will not be targeted to the Admin server or a configured manage server
10861089

10871090
# domain_typedef.py
10881091
WLSDPLY-12300={0} got the domain type {1} but the domain type definition file {2} was not valid: {3}

0 commit comments

Comments
 (0)