@@ -26,8 +26,8 @@ class Upgrade(upgrade.Upgrade):
26
26
@property
27
27
def unit_state (self ) -> typing .Optional [str ]:
28
28
if (
29
- self ._unit_workload_version is not None
30
- and self ._unit_workload_version != self ._app_workload_version
29
+ self ._unit_workload_container_version is not None
30
+ and self ._unit_workload_container_version != self ._app_workload_container_version
31
31
):
32
32
logger .debug ("Unit upgrade state: outdated" )
33
33
return "outdated"
@@ -37,28 +37,31 @@ def unit_state(self) -> typing.Optional[str]:
37
37
def unit_state (self , value : str ) -> None :
38
38
if value == "healthy" :
39
39
# Set snap revision on first install
40
- self ._unit_databag ["snap_revision" ] = snap .REVISION
41
- logger .debug (f"Saved { snap .REVISION = } in unit databag while setting state healthy" )
40
+ self ._unit_workload_container_version = snap .REVISION
41
+ self ._unit_workload_version = self ._current_versions ["workload" ]
42
+ logger .debug (
43
+ f'Saved { snap .REVISION = } and { self ._current_versions ["workload" ]= } in unit databag while setting state healthy'
44
+ )
42
45
# Super call
43
46
upgrade .Upgrade .unit_state .fset (self , value )
44
47
45
48
def _get_unit_healthy_status (
46
49
self , * , workload_status : typing .Optional [ops .StatusBase ]
47
50
) -> ops .StatusBase :
48
- if self ._unit_workload_version == self ._app_workload_version :
51
+ if self ._unit_workload_container_version == self ._app_workload_container_version :
49
52
if isinstance (workload_status , ops .WaitingStatus ):
50
53
return ops .WaitingStatus (
51
- f' Router { self ._current_versions [ "workload" ] } rev { self ._unit_workload_version } '
54
+ f" Router { self ._unit_workload_version } rev { self ._unit_workload_container_version } "
52
55
)
53
56
return ops .ActiveStatus (
54
- f' Router { self ._current_versions [ "workload" ] } rev { self ._unit_workload_version } running'
57
+ f" Router { self ._unit_workload_version } rev { self ._unit_workload_container_version } running"
55
58
)
56
59
if isinstance (workload_status , ops .WaitingStatus ):
57
60
return ops .WaitingStatus (
58
- f' Charmed operator upgraded. Router { self ._current_versions [ "workload" ] } rev { self ._unit_workload_version } '
61
+ f" Charmed operator upgraded. Router { self ._unit_workload_version } rev { self ._unit_workload_container_version } "
59
62
)
60
63
return ops .WaitingStatus (
61
- f' Charmed operator upgraded. Router { self ._current_versions [ "workload" ] } rev { self ._unit_workload_version } running'
64
+ f" Charmed operator upgraded. Router { self ._unit_workload_version } rev { self ._unit_workload_container_version } running"
62
65
)
63
66
64
67
@property
@@ -73,7 +76,7 @@ def app_status(self) -> typing.Optional[ops.StatusBase]:
73
76
return super ().app_status
74
77
75
78
@property
76
- def _unit_workload_versions (self ) -> typing .Dict [str , str ]:
79
+ def _unit_workload_container_versions (self ) -> typing .Dict [str , str ]:
77
80
"""{Unit name: installed snap revision}"""
78
81
versions = {}
79
82
for unit in self ._sorted_units :
@@ -82,15 +85,28 @@ def _unit_workload_versions(self) -> typing.Dict[str, str]:
82
85
return versions
83
86
84
87
@property
85
- def _unit_workload_version (self ) -> typing .Optional [str ]:
88
+ def _unit_workload_container_version (self ) -> typing .Optional [str ]:
86
89
"""Installed snap revision for this unit"""
87
90
return self ._unit_databag .get ("snap_revision" )
88
91
92
+ @_unit_workload_container_version .setter
93
+ def _unit_workload_container_version (self , value : str ):
94
+ self ._unit_databag ["snap_revision" ] = value
95
+
89
96
@property
90
- def _app_workload_version (self ) -> str :
97
+ def _app_workload_container_version (self ) -> str :
91
98
"""Snap revision for current charm code"""
92
99
return snap .REVISION
93
100
101
+ @property
102
+ def _unit_workload_version (self ) -> typing .Optional [str ]:
103
+ """Installed MySQL Router version for this unit"""
104
+ return self ._unit_databag .get ("workload_version" )
105
+
106
+ @_unit_workload_version .setter
107
+ def _unit_workload_version (self , value : str ):
108
+ self ._unit_databag ["workload_version" ] = value
109
+
94
110
def reconcile_partition (self , * , action_event : ops .ActionEvent = None ) -> None :
95
111
"""Handle Juju action to confirm first upgraded unit is healthy and resume upgrade."""
96
112
if action_event :
@@ -118,7 +134,7 @@ def upgrade_resumed(self, value: bool):
118
134
119
135
@property
120
136
def authorized (self ) -> bool :
121
- assert self ._unit_workload_version != self ._app_workload_version
137
+ assert self ._unit_workload_container_version != self ._app_workload_container_version
122
138
for index , unit in enumerate (self ._sorted_units ):
123
139
if unit .name == self ._unit .name :
124
140
# Higher number units have already upgraded
@@ -128,7 +144,8 @@ def authorized(self) -> bool:
128
144
return self .upgrade_resumed
129
145
return True
130
146
if (
131
- self ._unit_workload_versions .get (unit .name ) != self ._app_workload_version
147
+ self ._unit_workload_container_versions .get (unit .name )
148
+ != self ._app_workload_container_version
132
149
or self ._peer_relation .data [unit ].get ("state" ) != "healthy"
133
150
):
134
151
# Waiting for higher number units to upgrade
@@ -139,5 +156,8 @@ def upgrade_unit(self, *, workload_: workload.Workload, tls: bool) -> None:
139
156
logger .debug (f"Upgrading { self .authorized = } " )
140
157
self .unit_state = "upgrading"
141
158
workload_ .upgrade (unit = self ._unit , tls = tls )
142
- self ._unit_databag ["snap_revision" ] = snap .REVISION
143
- logger .debug (f"Saved { snap .REVISION = } in unit databag after upgrade" )
159
+ self ._unit_workload_container_version = snap .REVISION
160
+ self ._unit_workload_version = self ._current_versions ["workload" ]
161
+ logger .debug (
162
+ f'Saved { snap .REVISION = } and { self ._current_versions ["workload" ]= } in unit databag after upgrade'
163
+ )
0 commit comments