Skip to content

Commit

Permalink
pool: include change explanation in replica monitoring events
Browse files Browse the repository at this point in the history
Motivation:

EntryChangeEvent objects are sent to registered listeners when either a
replica's state changes, or when sticky flags are changed.  It is useful
to include the context to these changes to provide better logging.

Modification:

Add a why field member in EntryChangeEvent.  Update constructors to
populate this information.

Result:

No user or admin observable change, but EntryChangeEvent objects now
include an explanation describing why a change took place.

Target: master
Requires-notes: no
Requires-book: no
Patch: https://rb.dcache.org/r/11654/
Acked-by: Albert Rossi
  • Loading branch information
paulmillar committed Apr 1, 2019
1 parent 84f3e15 commit b51ca78
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,13 @@ public class EntryChangeEvent
{
protected final CacheEntry oldEntry;
protected final CacheEntry newEntry;
protected final String why;

public EntryChangeEvent(CacheEntry oldEntry, CacheEntry newEntry)
public EntryChangeEvent(String why, CacheEntry oldEntry, CacheEntry newEntry)
{
this.oldEntry = oldEntry;
this.newEntry = newEntry;
this.why = why;
}

public PnfsId getPnfsId()
Expand All @@ -32,6 +34,11 @@ public CacheEntry getNewEntry()
return newEntry;
}

public String getWhy()
{
return why;
}

public String toString()
{
return String.format("EntryChangeEvent [id=%s]", getPnfsId());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ private synchronized ReplicaRecord get()
}
CacheEntry entry = new CacheEntryImpl(_record);
_stateChangeListener.stateChanged(
new StateChangeEvent(entry, entry, NEW, _record.getState()));
new StateChangeEvent("loading CacheEntry", entry, entry, NEW, _record.getState()));
}
return this;
}
Expand Down Expand Up @@ -151,7 +151,7 @@ private void destroy(String why)
_inner.remove(_id);
_entries.remove(_id);
_stateChangeListener.stateChanged(
new StateChangeEvent(entry, entry, entry.getState(), DESTROYED));
new StateChangeEvent(why, entry, entry, entry.getState(), DESTROYED));
} catch (DiskErrorCacheException | RuntimeException e) {
_faultListener.faultOccurred(
new FaultEvent("repository", FaultAction.DEAD, "Internal repository error", e));
Expand Down Expand Up @@ -318,7 +318,7 @@ public synchronized Collection<StickyRecord> removeExpiredStickyFlags() throws C
Collection<StickyRecord> removed = _record.removeExpiredStickyFlags();
if (!removed.isEmpty()) {
CacheEntryImpl newEntry = new CacheEntryImpl(_record);
_stateChangeListener.stickyChanged(new StickyChangeEvent(oldEntry, newEntry));
_stateChangeListener.stickyChanged(new StickyChangeEvent("sticky has expired", oldEntry, newEntry));
}
return removed;
} catch (RuntimeException | DiskErrorCacheException e) {
Expand Down Expand Up @@ -357,7 +357,7 @@ public boolean setSticky(String owner, long validTill,
if (changed) {
CacheEntryImpl newEntry = new CacheEntryImpl(_record);
_stateChangeListener.stickyChanged(
new StickyChangeEvent(oldEntry, newEntry));
new StickyChangeEvent(why, oldEntry, newEntry));
}
return changed;
}
Expand All @@ -370,7 +370,7 @@ public Void setState(ReplicaState state) throws CacheException
r.setState(state);
CacheEntry newEntry = new CacheEntryImpl(_record);
_stateChangeListener.stateChanged(
new StateChangeEvent(oldEntry, newEntry, oldEntry.getState(),
new StateChangeEvent(why, oldEntry, newEntry, oldEntry.getState(),
newEntry.getState()));
}
return null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ public class StateChangeEvent extends EntryChangeEvent
private final ReplicaState _oldState;
private final ReplicaState _newState;

public StateChangeEvent(CacheEntry oldEntry, CacheEntry newEntry, ReplicaState oldState, ReplicaState newState)
public StateChangeEvent(String why, CacheEntry oldEntry, CacheEntry newEntry, ReplicaState oldState, ReplicaState newState)
{
super(oldEntry, newEntry);
super(why, oldEntry, newEntry);
_oldState = oldState;
_newState = newState;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@
*/
public class StickyChangeEvent extends EntryChangeEvent
{
public StickyChangeEvent(CacheEntry oldEntry, CacheEntry newEntry)
public StickyChangeEvent(String why, CacheEntry oldEntry, CacheEntry newEntry)
{
super(oldEntry, newEntry);
super(why, oldEntry, newEntry);
}

public String toString()
Expand Down

0 comments on commit b51ca78

Please sign in to comment.