Committed by
Gerrit Code Review
Log failures in state machine processing
Change-Id: Ib92768cf4cf5cce5e2642265d1c1aa3e2f13b246
Showing
2 changed files
with
56 additions
and
26 deletions
| ... | @@ -259,36 +259,41 @@ public class AtomixConsistentMapState extends ResourceStateMachine implements Se | ... | @@ -259,36 +259,41 @@ public class AtomixConsistentMapState extends ResourceStateMachine implements Se |
| 259 | * @return update result | 259 | * @return update result |
| 260 | */ | 260 | */ |
| 261 | protected MapEntryUpdateResult<String, byte[]> updateAndGet(Commit<? extends UpdateAndGet> commit) { | 261 | protected MapEntryUpdateResult<String, byte[]> updateAndGet(Commit<? extends UpdateAndGet> commit) { |
| 262 | - MapEntryUpdateResult.Status updateStatus = validate(commit.operation()); | 262 | + try { |
| 263 | - String key = commit.operation().key(); | 263 | + MapEntryUpdateResult.Status updateStatus = validate(commit.operation()); |
| 264 | - MapEntryValue oldCommitValue = mapEntries.get(commit.operation().key()); | 264 | + String key = commit.operation().key(); |
| 265 | - Versioned<byte[]> oldMapValue = toVersioned(oldCommitValue); | 265 | + MapEntryValue oldCommitValue = mapEntries.get(commit.operation().key()); |
| 266 | + Versioned<byte[]> oldMapValue = toVersioned(oldCommitValue); | ||
| 266 | 267 | ||
| 267 | - if (updateStatus != MapEntryUpdateResult.Status.OK) { | 268 | + if (updateStatus != MapEntryUpdateResult.Status.OK) { |
| 268 | - commit.close(); | 269 | + commit.close(); |
| 269 | - return new MapEntryUpdateResult<>(updateStatus, "", key, | 270 | + return new MapEntryUpdateResult<>(updateStatus, "", key, |
| 270 | - oldMapValue, oldMapValue); | 271 | + oldMapValue, oldMapValue); |
| 271 | - } | 272 | + } |
| 272 | 273 | ||
| 273 | - byte[] newValue = commit.operation().value(); | 274 | + byte[] newValue = commit.operation().value(); |
| 274 | - long newVersion = versionCounter.incrementAndGet(); | 275 | + long newVersion = versionCounter.incrementAndGet(); |
| 275 | - Versioned<byte[]> newMapValue = newValue == null ? null | 276 | + Versioned<byte[]> newMapValue = newValue == null ? null |
| 276 | - : new Versioned<>(newValue, newVersion); | 277 | + : new Versioned<>(newValue, newVersion); |
| 277 | 278 | ||
| 278 | - MapEvent.Type updateType = newValue == null ? REMOVE | 279 | + MapEvent.Type updateType = newValue == null ? REMOVE |
| 279 | - : oldCommitValue == null ? INSERT : UPDATE; | 280 | + : oldCommitValue == null ? INSERT : UPDATE; |
| 280 | - if (updateType == REMOVE || updateType == UPDATE) { | 281 | + if (updateType == REMOVE || updateType == UPDATE) { |
| 281 | - mapEntries.remove(key); | 282 | + mapEntries.remove(key); |
| 282 | - oldCommitValue.discard(); | 283 | + oldCommitValue.discard(); |
| 283 | - } | 284 | + } |
| 284 | - if (updateType == INSERT || updateType == UPDATE) { | 285 | + if (updateType == INSERT || updateType == UPDATE) { |
| 285 | - mapEntries.put(key, new NonTransactionalCommit(newVersion, commit)); | 286 | + mapEntries.put(key, new NonTransactionalCommit(newVersion, commit)); |
| 286 | - } else { | 287 | + } else { |
| 287 | - commit.close(); | 288 | + commit.close(); |
| 289 | + } | ||
| 290 | + publish(Lists.newArrayList(new MapEvent<>("", key, newMapValue, oldMapValue))); | ||
| 291 | + return new MapEntryUpdateResult<>(updateStatus, "", key, oldMapValue, | ||
| 292 | + newMapValue); | ||
| 293 | + } catch (Exception e) { | ||
| 294 | + log.error("State machine operation failed", e); | ||
| 295 | + throw Throwables.propagate(e); | ||
| 288 | } | 296 | } |
| 289 | - publish(Lists.newArrayList(new MapEvent<>("", key, newMapValue, oldMapValue))); | ||
| 290 | - return new MapEntryUpdateResult<>(updateStatus, "", key, oldMapValue, | ||
| 291 | - newMapValue); | ||
| 292 | } | 297 | } |
| 293 | 298 | ||
| 294 | /** | 299 | /** | ... | ... |
| ... | @@ -60,6 +60,7 @@ import org.slf4j.Logger; | ... | @@ -60,6 +60,7 @@ import org.slf4j.Logger; |
| 60 | 60 | ||
| 61 | import com.google.common.base.MoreObjects; | 61 | import com.google.common.base.MoreObjects; |
| 62 | import com.google.common.base.Objects; | 62 | import com.google.common.base.Objects; |
| 63 | +import com.google.common.base.Throwables; | ||
| 63 | import com.google.common.collect.Lists; | 64 | import com.google.common.collect.Lists; |
| 64 | import com.google.common.collect.Maps; | 65 | import com.google.common.collect.Maps; |
| 65 | 66 | ||
| ... | @@ -172,6 +173,9 @@ public class AtomixLeaderElectorState extends ResourceStateMachine | ... | @@ -172,6 +173,9 @@ public class AtomixLeaderElectorState extends ResourceStateMachine |
| 172 | notifyLeadershipChange(oldLeadership, newLeadership); | 173 | notifyLeadershipChange(oldLeadership, newLeadership); |
| 173 | } | 174 | } |
| 174 | return newLeadership; | 175 | return newLeadership; |
| 176 | + } catch (Exception e) { | ||
| 177 | + log.error("State machine operation failed", e); | ||
| 178 | + throw Throwables.propagate(e); | ||
| 175 | } finally { | 179 | } finally { |
| 176 | commit.close(); | 180 | commit.close(); |
| 177 | } | 181 | } |
| ... | @@ -191,6 +195,9 @@ public class AtomixLeaderElectorState extends ResourceStateMachine | ... | @@ -191,6 +195,9 @@ public class AtomixLeaderElectorState extends ResourceStateMachine |
| 191 | if (!Objects.equal(oldLeadership, newLeadership)) { | 195 | if (!Objects.equal(oldLeadership, newLeadership)) { |
| 192 | notifyLeadershipChange(oldLeadership, newLeadership); | 196 | notifyLeadershipChange(oldLeadership, newLeadership); |
| 193 | } | 197 | } |
| 198 | + } catch (Exception e) { | ||
| 199 | + log.error("State machine operation failed", e); | ||
| 200 | + throw Throwables.propagate(e); | ||
| 194 | } finally { | 201 | } finally { |
| 195 | commit.close(); | 202 | commit.close(); |
| 196 | } | 203 | } |
| ... | @@ -215,6 +222,9 @@ public class AtomixLeaderElectorState extends ResourceStateMachine | ... | @@ -215,6 +222,9 @@ public class AtomixLeaderElectorState extends ResourceStateMachine |
| 215 | return (electionState != null && | 222 | return (electionState != null && |
| 216 | electionState.leader() != null && | 223 | electionState.leader() != null && |
| 217 | commit.operation().nodeId().equals(electionState.leader().nodeId())); | 224 | commit.operation().nodeId().equals(electionState.leader().nodeId())); |
| 225 | + } catch (Exception e) { | ||
| 226 | + log.error("State machine operation failed", e); | ||
| 227 | + throw Throwables.propagate(e); | ||
| 218 | } finally { | 228 | } finally { |
| 219 | commit.close(); | 229 | commit.close(); |
| 220 | } | 230 | } |
| ... | @@ -239,6 +249,9 @@ public class AtomixLeaderElectorState extends ResourceStateMachine | ... | @@ -239,6 +249,9 @@ public class AtomixLeaderElectorState extends ResourceStateMachine |
| 239 | notifyLeadershipChange(oldLeadership, newLeadership); | 249 | notifyLeadershipChange(oldLeadership, newLeadership); |
| 240 | } | 250 | } |
| 241 | return true; | 251 | return true; |
| 252 | + } catch (Exception e) { | ||
| 253 | + log.error("State machine operation failed", e); | ||
| 254 | + throw Throwables.propagate(e); | ||
| 242 | } finally { | 255 | } finally { |
| 243 | commit.close(); | 256 | commit.close(); |
| 244 | } | 257 | } |
| ... | @@ -262,6 +275,9 @@ public class AtomixLeaderElectorState extends ResourceStateMachine | ... | @@ -262,6 +275,9 @@ public class AtomixLeaderElectorState extends ResourceStateMachine |
| 262 | } | 275 | } |
| 263 | }); | 276 | }); |
| 264 | notifyLeadershipChanges(changes); | 277 | notifyLeadershipChanges(changes); |
| 278 | + } catch (Exception e) { | ||
| 279 | + log.error("State machine operation failed", e); | ||
| 280 | + throw Throwables.propagate(e); | ||
| 265 | } finally { | 281 | } finally { |
| 266 | commit.close(); | 282 | commit.close(); |
| 267 | } | 283 | } |
| ... | @@ -276,6 +292,9 @@ public class AtomixLeaderElectorState extends ResourceStateMachine | ... | @@ -276,6 +292,9 @@ public class AtomixLeaderElectorState extends ResourceStateMachine |
| 276 | String topic = commit.operation().topic(); | 292 | String topic = commit.operation().topic(); |
| 277 | try { | 293 | try { |
| 278 | return leadership(topic); | 294 | return leadership(topic); |
| 295 | + } catch (Exception e) { | ||
| 296 | + log.error("State machine operation failed", e); | ||
| 297 | + throw Throwables.propagate(e); | ||
| 279 | } finally { | 298 | } finally { |
| 280 | commit.close(); | 299 | commit.close(); |
| 281 | } | 300 | } |
| ... | @@ -293,6 +312,9 @@ public class AtomixLeaderElectorState extends ResourceStateMachine | ... | @@ -293,6 +312,9 @@ public class AtomixLeaderElectorState extends ResourceStateMachine |
| 293 | Leader leader = leadership(e.getKey()).leader(); | 312 | Leader leader = leadership(e.getKey()).leader(); |
| 294 | return leader != null && leader.nodeId().equals(nodeId); | 313 | return leader != null && leader.nodeId().equals(nodeId); |
| 295 | }).keySet()); | 314 | }).keySet()); |
| 315 | + } catch (Exception e) { | ||
| 316 | + log.error("State machine operation failed", e); | ||
| 317 | + throw Throwables.propagate(e); | ||
| 296 | } finally { | 318 | } finally { |
| 297 | commit.close(); | 319 | commit.close(); |
| 298 | } | 320 | } |
| ... | @@ -308,6 +330,9 @@ public class AtomixLeaderElectorState extends ResourceStateMachine | ... | @@ -308,6 +330,9 @@ public class AtomixLeaderElectorState extends ResourceStateMachine |
| 308 | try { | 330 | try { |
| 309 | result.putAll(Maps.transformEntries(elections, (k, v) -> leadership(k))); | 331 | result.putAll(Maps.transformEntries(elections, (k, v) -> leadership(k))); |
| 310 | return result; | 332 | return result; |
| 333 | + } catch (Exception e) { | ||
| 334 | + log.error("State machine operation failed", e); | ||
| 335 | + throw Throwables.propagate(e); | ||
| 311 | } finally { | 336 | } finally { |
| 312 | commit.close(); | 337 | commit.close(); |
| 313 | } | 338 | } | ... | ... |
-
Please register or login to post a comment