22
33import io .scalecube .cluster .Member ;
44import java .nio .ByteBuffer ;
5+ import java .time .Instant ;
56import java .util .Objects ;
67import java .util .StringJoiner ;
78
@@ -21,37 +22,41 @@ public enum Type {
2122 private final Member member ;
2223 private final ByteBuffer oldMetadata ;
2324 private final ByteBuffer newMetadata ;
25+ private final long timestamp ;
2426
2527 private MembershipEvent (
26- Type type , Member member , ByteBuffer oldMetadata , ByteBuffer newMetadata ) {
28+ Type type , Member member , ByteBuffer oldMetadata , ByteBuffer newMetadata , long timestamp ) {
2729 this .type = type ;
2830 this .member = member ;
2931 this .oldMetadata = oldMetadata ;
3032 this .newMetadata = newMetadata ;
33+ this .timestamp = timestamp ;
3134 }
3235
3336 /**
3437 * Creates REMOVED membership event with cluster member and its metadata (optional).
3538 *
3639 * @param member cluster member; not null
3740 * @param metadata member metadata; optional
41+ * @param timestamp event timestamp
3842 * @return membership event
3943 */
40- public static MembershipEvent createRemoved (Member member , ByteBuffer metadata ) {
44+ public static MembershipEvent createRemoved (Member member , ByteBuffer metadata , long timestamp ) {
4145 Objects .requireNonNull (member , "member must be not null" );
42- return new MembershipEvent (Type .REMOVED , member , metadata , null );
46+ return new MembershipEvent (Type .REMOVED , member , metadata , null , timestamp );
4347 }
4448
4549 /**
4650 * Creates ADDED membership event with cluster member and its metadata.
4751 *
4852 * @param member cluster memeber; not null
4953 * @param metadata member metadata; not null
54+ * @param timestamp event timestamp
5055 * @return membership event
5156 */
52- public static MembershipEvent createAdded (Member member , ByteBuffer metadata ) {
57+ public static MembershipEvent createAdded (Member member , ByteBuffer metadata , long timestamp ) {
5358 Objects .requireNonNull (member , "member must be not null" );
54- return new MembershipEvent (Type .ADDED , member , null , metadata );
59+ return new MembershipEvent (Type .ADDED , member , null , metadata , timestamp );
5560 }
5661
5762 /**
@@ -60,12 +65,13 @@ public static MembershipEvent createAdded(Member member, ByteBuffer metadata) {
6065 * @param member cluster member; not null
6166 * @param oldMetadata previous metadata; not null
6267 * @param newMetadata new metadata; not null
68+ * @param timestamp event timestamp
6369 * @return membership event
6470 */
6571 public static MembershipEvent createUpdated (
66- Member member , ByteBuffer oldMetadata , ByteBuffer newMetadata ) {
72+ Member member , ByteBuffer oldMetadata , ByteBuffer newMetadata , long timestamp ) {
6773 Objects .requireNonNull (member , "member must be not null" );
68- return new MembershipEvent (Type .UPDATED , member , oldMetadata , newMetadata );
74+ return new MembershipEvent (Type .UPDATED , member , oldMetadata , newMetadata , timestamp );
6975 }
7076
7177 public Type type () {
@@ -96,16 +102,25 @@ public ByteBuffer newMetadata() {
96102 return newMetadata ;
97103 }
98104
105+ public long timestamp () {
106+ return timestamp ;
107+ }
108+
99109 @ Override
100110 public String toString () {
101111 return new StringJoiner (", " , MembershipEvent .class .getSimpleName () + "[" , "]" )
102112 .add ("type=" + type )
103113 .add ("member=" + member )
104114 .add ("oldMetadata=" + metadataAsString (oldMetadata ))
105115 .add ("newMetadata=" + metadataAsString (newMetadata ))
116+ .add ("timestamp=" + timestampAsString (timestamp ))
106117 .toString ();
107118 }
108119
120+ private String timestampAsString (long timestamp ) {
121+ return Instant .ofEpochMilli (timestamp ).toString ();
122+ }
123+
109124 private String metadataAsString (ByteBuffer metadata ) {
110125 if (metadata == null ) {
111126 return null ;
0 commit comments