Skip to content

Commit 7860968

Browse files
authored
Merge pull request ceph#60044 from avanthakkar/fix-smb-earmark-split
mgr/smb: fix condition for smb earmark when cluster_id doesn't match Reviewed-by: Adam King <[email protected]> Reviewed-by: John Mulligan <[email protected]>
2 parents cc481a6 + 9d1be68 commit 7860968

File tree

1 file changed

+26
-4
lines changed

1 file changed

+26
-4
lines changed

src/pybind/mgr/smb/handler.py

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -834,6 +834,19 @@ def _check_cluster(cluster: ClusterRef, staging: _Staging) -> None:
834834
)
835835

836836

837+
def _parse_earmark(earmark: str) -> dict:
838+
parts = earmark.split('.')
839+
840+
# If it only has one part (e.g., 'smb'), return None for cluster_id
841+
if len(parts) == 1:
842+
return {'scope': parts[0], 'cluster_id': None}
843+
844+
return {
845+
'scope': parts[0],
846+
'cluster_id': parts[2] if len(parts) > 2 else None,
847+
}
848+
849+
837850
def _check_share(
838851
share: ShareRef,
839852
staging: _Staging,
@@ -878,19 +891,28 @@ def _check_share(
878891
smb_earmark,
879892
)
880893
else:
894+
parsed_earmark = _parse_earmark(earmark)
895+
896+
# Check if the top-level scope is not SMB
881897
if not earmark_resolver.check_earmark(
882898
earmark, EarmarkTopScope.SMB
883899
):
884900
raise ErrorResult(
885901
share,
886-
msg=f"earmark has already been set by {earmark.split('.')[0]}",
902+
msg=f"earmark has already been set by {parsed_earmark['scope']}",
887903
)
888-
# Check if earmark is set by same cluster
889-
if earmark.split('.')[2] != share.cluster_id:
904+
905+
# Check if the earmark is set by a different cluster
906+
if (
907+
parsed_earmark['cluster_id']
908+
and parsed_earmark['cluster_id'] != share.cluster_id
909+
):
890910
raise ErrorResult(
891911
share,
892-
msg=f"earmark has already been set by smb cluster {earmark.split('.')[2]}",
912+
msg="earmark has already been set by smb cluster "
913+
f"{parsed_earmark['cluster_id']}",
893914
)
915+
894916
name_used_by = _share_name_in_use(staging, share)
895917
if name_used_by:
896918
raise ErrorResult(

0 commit comments

Comments
 (0)