17
17
*/
18
18
package org .apache .hadoop .hbase .replication ;
19
19
20
+ import java .util .HashMap ;
21
+ import java .util .HashSet ;
22
+ import java .util .List ;
23
+ import java .util .Map ;
24
+ import java .util .Set ;
20
25
import org .apache .hadoop .hbase .HBaseClassTestRule ;
26
+ import org .apache .hadoop .hbase .TableName ;
21
27
import org .apache .hadoop .hbase .testclassification .ClientTests ;
22
28
import org .apache .hadoop .hbase .testclassification .SmallTests ;
23
29
import org .apache .hadoop .hbase .util .BuilderStyleTest ;
30
+ import org .junit .Assert ;
24
31
import org .junit .ClassRule ;
25
32
import org .junit .Test ;
26
33
import org .junit .experimental .categories .Category ;
@@ -32,6 +39,9 @@ public class TestReplicationPeerConfig {
32
39
public static final HBaseClassTestRule CLASS_RULE =
33
40
HBaseClassTestRule .forClass (TestReplicationPeerConfig .class );
34
41
42
+ private static TableName TABLE_A = TableName .valueOf ("replication" , "testA" );
43
+ private static TableName TABLE_B = TableName .valueOf ("replication" , "testB" );
44
+
35
45
@ Test
36
46
public void testClassMethodsAreBuilderStyle () {
37
47
/* ReplicationPeerConfig should have a builder style setup where setXXX/addXXX methods
@@ -48,4 +58,196 @@ public void testClassMethodsAreBuilderStyle() {
48
58
49
59
BuilderStyleTest .assertClassesAreBuilderStyle (ReplicationPeerConfig .class );
50
60
}
61
+
62
+ @ Test
63
+ public void testNeedToReplicateWithReplicatingAll () {
64
+ ReplicationPeerConfig peerConfig ;
65
+ ReplicationPeerConfig .ReplicationPeerConfigBuilderImpl builder =
66
+ new ReplicationPeerConfig .ReplicationPeerConfigBuilderImpl ();
67
+ Map <TableName , List <String >> tableCfs = new HashMap <>();
68
+ Set <String > namespaces = new HashSet <>();
69
+
70
+ // 1. replication_all flag is true, no namespaces and table-cfs config
71
+ builder .setReplicateAllUserTables (true );
72
+ peerConfig = builder .build ();
73
+ Assert .assertTrue (peerConfig .needToReplicate (TABLE_A ));
74
+
75
+ // 2. replicate_all flag is true, and config in excludedTableCfs
76
+ builder .setExcludeNamespaces (null );
77
+ // empty map
78
+ tableCfs = new HashMap <>();
79
+ builder .setReplicateAllUserTables (true );
80
+ builder .setExcludeTableCFsMap (tableCfs );
81
+ peerConfig = builder .build ();
82
+ Assert .assertTrue (peerConfig .needToReplicate (TABLE_A ));
83
+
84
+ // table testB
85
+ tableCfs = new HashMap <>();
86
+ tableCfs .put (TABLE_B , null );
87
+ builder .setReplicateAllUserTables (true );
88
+ builder .setExcludeTableCFsMap (tableCfs );
89
+ peerConfig = builder .build ();
90
+ Assert .assertTrue (peerConfig .needToReplicate (TABLE_A ));
91
+
92
+ // table testA
93
+ tableCfs = new HashMap <>();
94
+ tableCfs .put (TABLE_A , null );
95
+ builder .setReplicateAllUserTables (true );
96
+ builder .setExcludeTableCFsMap (tableCfs );
97
+ peerConfig = builder .build ();
98
+ Assert .assertFalse (peerConfig .needToReplicate (TABLE_A ));
99
+
100
+ // 3. replicate_all flag is true, and config in excludeNamespaces
101
+ builder .setExcludeTableCFsMap (null );
102
+ // empty set
103
+ namespaces = new HashSet <>();
104
+ builder .setReplicateAllUserTables (true );
105
+ builder .setExcludeNamespaces (namespaces );
106
+ peerConfig = builder .build ();
107
+ Assert .assertTrue (peerConfig .needToReplicate (TABLE_A ));
108
+
109
+ // namespace default
110
+ namespaces = new HashSet <>();
111
+ namespaces .add ("default" );
112
+ builder .setReplicateAllUserTables (true );
113
+ builder .setExcludeNamespaces (namespaces );
114
+ peerConfig = builder .build ();
115
+ Assert .assertTrue (peerConfig .needToReplicate (TABLE_A ));
116
+
117
+ // namespace replication
118
+ namespaces = new HashSet <>();
119
+ namespaces .add ("replication" );
120
+ builder .setReplicateAllUserTables (true );
121
+ builder .setExcludeNamespaces (namespaces );
122
+ peerConfig = builder .build ();
123
+ Assert .assertFalse (peerConfig .needToReplicate (TABLE_A ));
124
+
125
+ // 4. replicate_all flag is true, and config excludeNamespaces and excludedTableCfs both
126
+ // Namespaces config doesn't conflict with table-cfs config
127
+ namespaces = new HashSet <>();
128
+ tableCfs = new HashMap <>();
129
+ namespaces .add ("replication" );
130
+ tableCfs .put (TABLE_A , null );
131
+ builder .setReplicateAllUserTables (true );
132
+ builder .setExcludeTableCFsMap (tableCfs );
133
+ builder .setExcludeNamespaces (namespaces );
134
+ peerConfig = builder .build ();
135
+ Assert .assertFalse (peerConfig .needToReplicate (TABLE_A ));
136
+
137
+ // Namespaces config conflicts with table-cfs config
138
+ namespaces = new HashSet <>();
139
+ tableCfs = new HashMap <>();
140
+ namespaces .add ("default" );
141
+ tableCfs .put (TABLE_A , null );
142
+ builder .setReplicateAllUserTables (true );
143
+ builder .setExcludeTableCFsMap (tableCfs );
144
+ builder .setExcludeNamespaces (namespaces );
145
+ peerConfig = builder .build ();
146
+ Assert .assertFalse (peerConfig .needToReplicate (TABLE_A ));
147
+
148
+ namespaces = new HashSet <>();
149
+ tableCfs = new HashMap <>();
150
+ namespaces .add ("replication" );
151
+ tableCfs .put (TABLE_B , null );
152
+ builder .setReplicateAllUserTables (true );
153
+ builder .setExcludeTableCFsMap (tableCfs );
154
+ builder .setExcludeNamespaces (namespaces );
155
+ peerConfig = builder .build ();
156
+ Assert .assertFalse (peerConfig .needToReplicate (TABLE_A ));
157
+
158
+ }
159
+
160
+ @ Test
161
+ public void testNeedToReplicateWithoutReplicatingAll () {
162
+ ReplicationPeerConfig peerConfig ;
163
+ ReplicationPeerConfig .ReplicationPeerConfigBuilderImpl builder =
164
+ new ReplicationPeerConfig .ReplicationPeerConfigBuilderImpl ();
165
+ Map <TableName , List <String >> tableCfs = new HashMap <>();
166
+ Set <String > namespaces = new HashSet <>();
167
+
168
+ // 1. replication_all flag is false, no namespaces and table-cfs config
169
+ builder .setReplicateAllUserTables (false );
170
+ peerConfig = builder .build ();
171
+ Assert .assertFalse (peerConfig .needToReplicate (TABLE_A ));
172
+
173
+ // 2. replicate_all flag is false, and only config table-cfs in peer
174
+ // empty map
175
+ builder .setReplicateAllUserTables (false );
176
+ builder .setTableCFsMap (tableCfs );
177
+ peerConfig = builder .build ();
178
+ Assert .assertFalse (peerConfig .needToReplicate (TABLE_A ));
179
+
180
+ // table testB
181
+ tableCfs = new HashMap <>();
182
+ tableCfs .put (TABLE_B , null );
183
+ builder .setReplicateAllUserTables (false );
184
+ builder .setTableCFsMap (tableCfs );
185
+ peerConfig = builder .build ();
186
+ Assert .assertFalse (peerConfig .needToReplicate (TABLE_A ));
187
+
188
+ // table testA
189
+ tableCfs = new HashMap <>();
190
+ tableCfs .put (TABLE_A , null );
191
+ builder .setReplicateAllUserTables (false );
192
+ builder .setTableCFsMap (tableCfs );
193
+ peerConfig = builder .build ();
194
+ Assert .assertTrue (peerConfig .needToReplicate (TABLE_A ));
195
+
196
+ // 3. replication_all flag is false, and only config namespace in peer
197
+ builder .setTableCFsMap (null );
198
+ // empty set
199
+ builder .setReplicateAllUserTables (false );
200
+ builder .setNamespaces (namespaces );
201
+ peerConfig = builder .build ();
202
+ Assert .assertFalse (peerConfig .needToReplicate (TABLE_A ));
203
+
204
+ // namespace default
205
+ namespaces = new HashSet <>();
206
+ namespaces .add ("default" );
207
+ builder .setReplicateAllUserTables (false );
208
+ builder .setNamespaces (namespaces );
209
+ peerConfig = builder .build ();
210
+ Assert .assertFalse (peerConfig .needToReplicate (TABLE_A ));
211
+
212
+ // namespace replication
213
+ namespaces = new HashSet <>();
214
+ namespaces .add ("replication" );
215
+ builder .setReplicateAllUserTables (false );
216
+ builder .setNamespaces (namespaces );
217
+ peerConfig = builder .build ();
218
+ Assert .assertTrue (peerConfig .needToReplicate (TABLE_A ));
219
+
220
+ // 4. replicate_all flag is false, and config namespaces and table-cfs both
221
+ // Namespaces config doesn't conflict with table-cfs config
222
+ namespaces = new HashSet <>();
223
+ tableCfs = new HashMap <>();
224
+ namespaces .add ("replication" );
225
+ tableCfs .put (TABLE_A , null );
226
+ builder .setReplicateAllUserTables (false );
227
+ builder .setTableCFsMap (tableCfs );
228
+ builder .setNamespaces (namespaces );
229
+ peerConfig = builder .build ();
230
+ Assert .assertTrue (peerConfig .needToReplicate (TABLE_A ));
231
+
232
+ // Namespaces config conflicts with table-cfs config
233
+ namespaces = new HashSet <>();
234
+ tableCfs = new HashMap <>();
235
+ namespaces .add ("default" );
236
+ tableCfs .put (TABLE_A , null );
237
+ builder .setReplicateAllUserTables (false );
238
+ builder .setTableCFsMap (tableCfs );
239
+ builder .setNamespaces (namespaces );
240
+ peerConfig = builder .build ();
241
+ Assert .assertTrue (peerConfig .needToReplicate (TABLE_A ));
242
+
243
+ namespaces = new HashSet <>();
244
+ tableCfs = new HashMap <>();
245
+ namespaces .add ("replication" );
246
+ tableCfs .put (TABLE_B , null );
247
+ builder .setReplicateAllUserTables (false );
248
+ builder .setTableCFsMap (tableCfs );
249
+ builder .setNamespaces (namespaces );
250
+ peerConfig = builder .build ();
251
+ Assert .assertTrue (peerConfig .needToReplicate (TABLE_A ));
252
+ }
51
253
}
0 commit comments