1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package jgroup.relacs.gm;
19
20 import java.io.Serializable;
21
22 import jgroup.core.Layer;
23 import jgroup.core.View;
24 import jgroup.core.Layer.FinalizeLayer;
25
26
27
28
29
30
31 public interface TimestampService
32 extends Layer, FinalizeLayer
33 {
34
35
36
37
38 public Timestamp getTimestamp(int id);
39
40
41
42
43
44
45
46
47
48 public long getTimestampCounter();
49
50
51
52
53
54
55
56 public class Timestamp
57 implements Serializable
58 {
59 private static final long serialVersionUID = 1868153781418135225L;
60
61 private long clientGroupViewId;
62 private long timestamp;
63 public int viewSize;
64 private int gid;
65 private int id;
66
67 Timestamp(int gid, int id, int vsize)
68 {
69 this.gid = gid;
70 this.id = id;
71 this.viewSize = vsize;
72 }
73
74
75
76
77
78 void viewChange(View view)
79 {
80 clientGroupViewId = view.getVid();
81 viewSize = view.size();
82 }
83
84 void updateTimestamp()
85 {
86 timestamp++;
87 }
88
89
90
91
92
93 Timestamp greatest(Timestamp ts)
94 {
95 if (timestamp >= ts.timestamp)
96 return this;
97 else
98 return ts;
99 }
100
101 public boolean equals(Object obj)
102 {
103 if (obj instanceof Timestamp) {
104 Timestamp t = (Timestamp) obj;
105 if (timestamp == t.timestamp && gid == t.gid && id == t.id)
106 return true;
107 return false;
108 }
109 return false;
110 }
111
112 public int hashCode()
113 {
114 return gid ^ viewSize ^ id
115 ^ (int)(timestamp ^ (timestamp >>> 32))
116 ^ (int)(clientGroupViewId ^ (clientGroupViewId >>> 32));
117 }
118
119 public String toString()
120 {
121 return "[ts=" + gid + ", " + timestamp + ", " + id + ", " + hashCode() + "]";
122 }
123 }
124
125 }