1 /*
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements. See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership. The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License. You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 */
19
20 package org.apache.hadoop.hbase.coprocessor;
21
22 import java.io.IOException;
23 import java.util.List;
24
25 import org.apache.hadoop.hbase.classification.InterfaceAudience;
26 import org.apache.hadoop.hbase.classification.InterfaceStability;
27 import org.apache.hadoop.hbase.Coprocessor;
28 import org.apache.hadoop.hbase.HBaseInterfaceAudience;
29 import org.apache.hadoop.hbase.ProcedureInfo;
30 import org.apache.hadoop.hbase.TableName;
31 import org.apache.hadoop.hbase.HColumnDescriptor;
32 import org.apache.hadoop.hbase.HRegionInfo;
33 import org.apache.hadoop.hbase.HTableDescriptor;
34 import org.apache.hadoop.hbase.NamespaceDescriptor;
35 import org.apache.hadoop.hbase.ServerName;
36 import org.apache.hadoop.hbase.master.RegionPlan;
37 import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;
38 import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;
39 import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription;
40 import org.apache.hadoop.hbase.protobuf.generated.QuotaProtos.Quotas;
41
42 /**
43 * Defines coprocessor hooks for interacting with operations on the
44 * {@link org.apache.hadoop.hbase.master.HMaster} process.
45 */
46 @InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.COPROC)
47 @InterfaceStability.Evolving
48 public interface MasterObserver extends Coprocessor {
49
50 /**
51 * Called before a new table is created by
52 * {@link org.apache.hadoop.hbase.master.HMaster}. Called as part of create
53 * table RPC call.
54 * It can't bypass the default action, e.g., ctx.bypass() won't have effect.
55 * @param ctx the environment to interact with the framework and master
56 * @param desc the HTableDescriptor for the table
57 * @param regions the initial regions created for the table
58 * @throws IOException
59 */
60 void preCreateTable(final ObserverContext<MasterCoprocessorEnvironment> ctx,
61 HTableDescriptor desc, HRegionInfo[] regions) throws IOException;
62
63 /**
64 * Called after the createTable operation has been requested. Called as part
65 * of create table RPC call.
66 * @param ctx the environment to interact with the framework and master
67 * @param desc the HTableDescriptor for the table
68 * @param regions the initial regions created for the table
69 * @throws IOException
70 */
71 void postCreateTable(final ObserverContext<MasterCoprocessorEnvironment> ctx,
72 HTableDescriptor desc, HRegionInfo[] regions) throws IOException;
73 /**
74 * Called before a new table is created by
75 * {@link org.apache.hadoop.hbase.master.HMaster}. Called as part of create
76 * table handler and it is async to the create RPC call.
77 * It can't bypass the default action, e.g., ctx.bypass() won't have effect.
78 * @param ctx the environment to interact with the framework and master
79 * @param desc the HTableDescriptor for the table
80 * @param regions the initial regions created for the table
81 * @throws IOException
82 */
83 void preCreateTableHandler(final ObserverContext<MasterCoprocessorEnvironment>
84 ctx, HTableDescriptor desc, HRegionInfo[] regions) throws IOException;
85
86 /**
87 * Called after the createTable operation has been requested. Called as part
88 * of create table RPC call. Called as part of create table handler and
89 * it is async to the create RPC call.
90 * @param ctx the environment to interact with the framework and master
91 * @param desc the HTableDescriptor for the table
92 * @param regions the initial regions created for the table
93 * @throws IOException
94 */
95 void postCreateTableHandler(final ObserverContext<MasterCoprocessorEnvironment>
96 ctx, HTableDescriptor desc, HRegionInfo[] regions) throws IOException;
97
98 /**
99 * Called before {@link org.apache.hadoop.hbase.master.HMaster} deletes a
100 * table. Called as part of delete table RPC call.
101 * It can't bypass the default action, e.g., ctx.bypass() won't have effect.
102 * @param ctx the environment to interact with the framework and master
103 * @param tableName the name of the table
104 */
105 void preDeleteTable(final ObserverContext<MasterCoprocessorEnvironment> ctx,
106 TableName tableName) throws IOException;
107
108 /**
109 * Called after the deleteTable operation has been requested. Called as part
110 * of delete table RPC call.
111 * @param ctx the environment to interact with the framework and master
112 * @param tableName the name of the table
113 */
114 void postDeleteTable(final ObserverContext<MasterCoprocessorEnvironment> ctx,
115 TableName tableName) throws IOException;
116
117 /**
118 * Called before {@link org.apache.hadoop.hbase.master.HMaster} deletes a
119 * table. Called as part of delete table handler and
120 * it is async to the delete RPC call.
121 * It can't bypass the default action, e.g., ctx.bypass() won't have effect.
122 * @param ctx the environment to interact with the framework and master
123 * @param tableName the name of the table
124 */
125 void preDeleteTableHandler(
126 final ObserverContext<MasterCoprocessorEnvironment> ctx, TableName tableName)
127 throws IOException;
128
129 /**
130 * Called after {@link org.apache.hadoop.hbase.master.HMaster} deletes a
131 * table. Called as part of delete table handler and it is async to the
132 * delete RPC call.
133 * It can't bypass the default action, e.g., ctx.bypass() won't have effect.
134 * @param ctx the environment to interact with the framework and master
135 * @param tableName the name of the table
136 */
137 void postDeleteTableHandler(
138 final ObserverContext<MasterCoprocessorEnvironment> ctx, TableName tableName)
139 throws IOException;
140
141
142 /**
143 * Called before {@link org.apache.hadoop.hbase.master.HMaster} truncates a
144 * table. Called as part of truncate table RPC call.
145 * It can't bypass the default action, e.g., ctx.bypass() won't have effect.
146 * @param ctx the environment to interact with the framework and master
147 * @param tableName the name of the table
148 */
149 void preTruncateTable(final ObserverContext<MasterCoprocessorEnvironment> ctx,
150 TableName tableName) throws IOException;
151
152 /**
153 * Called after the truncateTable operation has been requested. Called as part
154 * of truncate table RPC call.
155 * The truncate is synchronous, so this method will be called when the
156 * truncate operation is terminated.
157 * @param ctx the environment to interact with the framework and master
158 * @param tableName the name of the table
159 */
160 void postTruncateTable(final ObserverContext<MasterCoprocessorEnvironment> ctx,
161 TableName tableName) throws IOException;
162
163 /**
164 * Called before {@link org.apache.hadoop.hbase.master.HMaster} truncates a
165 * table. Called as part of truncate table handler and it is sync
166 * to the truncate RPC call.
167 * It can't bypass the default action, e.g., ctx.bypass() won't have effect.
168 * @param ctx the environment to interact with the framework and master
169 * @param tableName the name of the table
170 */
171 void preTruncateTableHandler(
172 final ObserverContext<MasterCoprocessorEnvironment> ctx, TableName tableName)
173 throws IOException;
174
175 /**
176 * Called after {@link org.apache.hadoop.hbase.master.HMaster} truncates a
177 * table. Called as part of truncate table handler and it is sync to the
178 * truncate RPC call.
179 * It can't bypass the default action, e.g., ctx.bypass() won't have effect.
180 * @param ctx the environment to interact with the framework and master
181 * @param tableName the name of the table
182 */
183 void postTruncateTableHandler(
184 final ObserverContext<MasterCoprocessorEnvironment> ctx, TableName tableName)
185 throws IOException;
186
187 /**
188 * Called prior to modifying a table's properties. Called as part of modify
189 * table RPC call.
190 * It can't bypass the default action, e.g., ctx.bypass() won't have effect.
191 * @param ctx the environment to interact with the framework and master
192 * @param tableName the name of the table
193 * @param htd the HTableDescriptor
194 */
195 void preModifyTable(final ObserverContext<MasterCoprocessorEnvironment> ctx,
196 final TableName tableName, HTableDescriptor htd) throws IOException;
197
198 /**
199 * Called after the modifyTable operation has been requested. Called as part
200 * of modify table RPC call.
201 * @param ctx the environment to interact with the framework and master
202 * @param tableName the name of the table
203 * @param htd the HTableDescriptor
204 */
205 void postModifyTable(final ObserverContext<MasterCoprocessorEnvironment> ctx,
206 final TableName tableName, HTableDescriptor htd) throws IOException;
207
208 /**
209 * Called prior to modifying a table's properties. Called as part of modify
210 * table handler and it is async to the modify table RPC call.
211 * It can't bypass the default action, e.g., ctx.bypass() won't have effect.
212 * @param ctx the environment to interact with the framework and master
213 * @param tableName the name of the table
214 * @param htd the HTableDescriptor
215 */
216 void preModifyTableHandler(
217 final ObserverContext<MasterCoprocessorEnvironment> ctx,
218 final TableName tableName, HTableDescriptor htd) throws IOException;
219
220 /**
221 * Called after to modifying a table's properties. Called as part of modify
222 * table handler and it is async to the modify table RPC call.
223 * It can't bypass the default action, e.g., ctx.bypass() won't have effect.
224 * @param ctx the environment to interact with the framework and master
225 * @param tableName the name of the table
226 * @param htd the HTableDescriptor
227 */
228 void postModifyTableHandler(
229 final ObserverContext<MasterCoprocessorEnvironment> ctx,
230 final TableName tableName, HTableDescriptor htd) throws IOException;
231
232 /**
233 * Called prior to adding a new column family to the table. Called as part of
234 * add column RPC call.
235 * @param ctx the environment to interact with the framework and master
236 * @param tableName the name of the table
237 * @param column the HColumnDescriptor
238 */
239 void preAddColumn(final ObserverContext<MasterCoprocessorEnvironment> ctx,
240 TableName tableName, HColumnDescriptor column) throws IOException;
241
242 /**
243 * Called after the new column family has been created. Called as part of
244 * add column RPC call.
245 * @param ctx the environment to interact with the framework and master
246 * @param tableName the name of the table
247 * @param column the HColumnDescriptor
248 */
249 void postAddColumn(final ObserverContext<MasterCoprocessorEnvironment> ctx,
250 TableName tableName, HColumnDescriptor column) throws IOException;
251
252 /**
253 * Called prior to adding a new column family to the table. Called as part of
254 * add column handler.
255 * @param ctx the environment to interact with the framework and master
256 * @param tableName the name of the table
257 * @param column the HColumnDescriptor
258 */
259 void preAddColumnHandler(
260 final ObserverContext<MasterCoprocessorEnvironment> ctx,
261 TableName tableName, HColumnDescriptor column) throws IOException;
262
263 /**
264 * Called after the new column family has been created. Called as part of
265 * add column handler.
266 * @param ctx the environment to interact with the framework and master
267 * @param tableName the name of the table
268 * @param column the HColumnDescriptor
269 */
270 void postAddColumnHandler(
271 final ObserverContext<MasterCoprocessorEnvironment> ctx,
272 TableName tableName, HColumnDescriptor column) throws IOException;
273
274 /**
275 * Called prior to modifying a column family's attributes. Called as part of
276 * modify column RPC call.
277 * @param ctx the environment to interact with the framework and master
278 * @param tableName the name of the table
279 * @param descriptor the HColumnDescriptor
280 */
281 void preModifyColumn(final ObserverContext<MasterCoprocessorEnvironment> ctx,
282 TableName tableName, HColumnDescriptor descriptor) throws IOException;
283
284 /**
285 * Called after the column family has been updated. Called as part of modify
286 * column RPC call.
287 * @param ctx the environment to interact with the framework and master
288 * @param tableName the name of the table
289 * @param descriptor the HColumnDescriptor
290 */
291 void postModifyColumn(final ObserverContext<MasterCoprocessorEnvironment> ctx,
292 TableName tableName, HColumnDescriptor descriptor) throws IOException;
293
294 /**
295 * Called prior to modifying a column family's attributes. Called as part of
296 * modify column handler.
297 * @param ctx the environment to interact with the framework and master
298 * @param tableName the name of the table
299 * @param descriptor the HColumnDescriptor
300 */
301 void preModifyColumnHandler(
302 final ObserverContext<MasterCoprocessorEnvironment> ctx,
303 TableName tableName, HColumnDescriptor descriptor) throws IOException;
304
305 /**
306 * Called after the column family has been updated. Called as part of modify
307 * column handler.
308 * @param ctx the environment to interact with the framework and master
309 * @param tableName the name of the table
310 * @param descriptor the HColumnDescriptor
311 */
312 void postModifyColumnHandler(
313 final ObserverContext<MasterCoprocessorEnvironment> ctx,
314 TableName tableName, HColumnDescriptor descriptor) throws IOException;
315
316
317 /**
318 * Called prior to deleting the entire column family. Called as part of
319 * delete column RPC call.
320 * @param ctx the environment to interact with the framework and master
321 * @param tableName the name of the table
322 * @param c the column
323 */
324 void preDeleteColumn(final ObserverContext<MasterCoprocessorEnvironment> ctx,
325 final TableName tableName, final byte[] c) throws IOException;
326
327 /**
328 * Called after the column family has been deleted. Called as part of delete
329 * column RPC call.
330 * @param ctx the environment to interact with the framework and master
331 * @param tableName the name of the table
332 * @param c the column
333 */
334 void postDeleteColumn(final ObserverContext<MasterCoprocessorEnvironment> ctx,
335 final TableName tableName, final byte[] c) throws IOException;
336
337 /**
338 * Called prior to deleting the entire column family. Called as part of
339 * delete column handler.
340 * @param ctx the environment to interact with the framework and master
341 * @param tableName the name of the table
342 * @param c the column
343 */
344 void preDeleteColumnHandler(
345 final ObserverContext<MasterCoprocessorEnvironment> ctx,
346 final TableName tableName, final byte[] c) throws IOException;
347
348 /**
349 * Called after the column family has been deleted. Called as part of
350 * delete column handler.
351 * @param ctx the environment to interact with the framework and master
352 * @param tableName the name of the table
353 * @param c the column
354 */
355 void postDeleteColumnHandler(
356 final ObserverContext<MasterCoprocessorEnvironment> ctx,
357 final TableName tableName, final byte[] c) throws IOException;
358
359 /**
360 * Called prior to enabling a table. Called as part of enable table RPC call.
361 * It can't bypass the default action, e.g., ctx.bypass() won't have effect.
362 * @param ctx the environment to interact with the framework and master
363 * @param tableName the name of the table
364 */
365 void preEnableTable(final ObserverContext<MasterCoprocessorEnvironment> ctx,
366 final TableName tableName) throws IOException;
367
368 /**
369 * Called after the enableTable operation has been requested. Called as part
370 * of enable table RPC call.
371 * @param ctx the environment to interact with the framework and master
372 * @param tableName the name of the table
373 */
374 void postEnableTable(final ObserverContext<MasterCoprocessorEnvironment> ctx,
375 final TableName tableName) throws IOException;
376
377 /**
378 * Called prior to enabling a table. Called as part of enable table handler
379 * and it is async to the enable table RPC call.
380 * It can't bypass the default action, e.g., ctx.bypass() won't have effect.
381 * @param ctx the environment to interact with the framework and master
382 * @param tableName the name of the table
383 */
384 void preEnableTableHandler(
385 final ObserverContext<MasterCoprocessorEnvironment> ctx,
386 final TableName tableName) throws IOException;
387
388 /**
389 * Called after the enableTable operation has been requested. Called as part
390 * of enable table handler and it is async to the enable table RPC call.
391 * @param ctx the environment to interact with the framework and master
392 * @param tableName the name of the table
393 */
394 void postEnableTableHandler(
395 final ObserverContext<MasterCoprocessorEnvironment> ctx,
396 final TableName tableName) throws IOException;
397
398 /**
399 * Called prior to disabling a table. Called as part of disable table RPC
400 * call.
401 * It can't bypass the default action, e.g., ctx.bypass() won't have effect.
402 * @param ctx the environment to interact with the framework and master
403 * @param tableName the name of the table
404 */
405 void preDisableTable(final ObserverContext<MasterCoprocessorEnvironment> ctx,
406 final TableName tableName) throws IOException;
407
408 /**
409 * Called after the disableTable operation has been requested. Called as part
410 * of disable table RPC call.
411 * @param ctx the environment to interact with the framework and master
412 * @param tableName the name of the table
413 */
414 void postDisableTable(final ObserverContext<MasterCoprocessorEnvironment> ctx,
415 final TableName tableName) throws IOException;
416
417 /**
418 * Called prior to disabling a table. Called as part of disable table handler
419 * and it is asyn to the disable table RPC call.
420 * It can't bypass the default action, e.g., ctx.bypass() won't have effect.
421 * @param ctx the environment to interact with the framework and master
422 * @param tableName the name of the table
423 */
424 void preDisableTableHandler(
425 final ObserverContext<MasterCoprocessorEnvironment> ctx,
426 final TableName tableName) throws IOException;
427
428 /**
429 * Called after the disableTable operation has been requested. Called as part
430 * of disable table handler and it is asyn to the disable table RPC call.
431 * @param ctx the environment to interact with the framework and master
432 * @param tableName the name of the table
433 */
434 void postDisableTableHandler(
435 final ObserverContext<MasterCoprocessorEnvironment> ctx,
436 final TableName tableName) throws IOException;
437
438 /**
439 * Called prior to moving a given region from one region server to another.
440 * @param ctx the environment to interact with the framework and master
441 * @param region the HRegionInfo
442 * @param srcServer the source ServerName
443 * @param destServer the destination ServerName
444 */
445 void preMove(final ObserverContext<MasterCoprocessorEnvironment> ctx,
446 final HRegionInfo region, final ServerName srcServer,
447 final ServerName destServer)
448 throws IOException;
449
450 /**
451 * Called after the region move has been requested.
452 * @param ctx the environment to interact with the framework and master
453 * @param region the HRegionInfo
454 * @param srcServer the source ServerName
455 * @param destServer the destination ServerName
456 */
457 void postMove(final ObserverContext<MasterCoprocessorEnvironment> ctx,
458 final HRegionInfo region, final ServerName srcServer,
459 final ServerName destServer)
460 throws IOException;
461
462 /**
463 * Called before a abortProcedure request has been processed.
464 * @param ctx the environment to interact with the framework and master
465 * @throws IOException
466 */
467 public void preAbortProcedure(
468 ObserverContext<MasterCoprocessorEnvironment> ctx,
469 final ProcedureExecutor<MasterProcedureEnv> procEnv,
470 final long procId) throws IOException;
471
472 /**
473 * Called after a abortProcedure request has been processed.
474 * @param ctx the environment to interact with the framework and master
475 */
476 public void postAbortProcedure(ObserverContext<MasterCoprocessorEnvironment> ctx)
477 throws IOException;
478
479 /**
480 * Called before a listProcedures request has been processed.
481 * @param ctx the environment to interact with the framework and master
482 * @throws IOException
483 */
484 void preListProcedures(ObserverContext<MasterCoprocessorEnvironment> ctx)
485 throws IOException;
486
487 /**
488 * Called after a listProcedures request has been processed.
489 * @param ctx the environment to interact with the framework and master
490 * @param procInfoList the list of procedures about to be returned
491 */
492 void postListProcedures(
493 ObserverContext<MasterCoprocessorEnvironment> ctx,
494 List<ProcedureInfo> procInfoList) throws IOException;
495
496 /**
497 * Called prior to assigning a specific region.
498 * @param ctx the environment to interact with the framework and master
499 * @param regionInfo the regionInfo of the region
500 */
501 void preAssign(final ObserverContext<MasterCoprocessorEnvironment> ctx,
502 final HRegionInfo regionInfo) throws IOException;
503
504 /**
505 * Called after the region assignment has been requested.
506 * @param ctx the environment to interact with the framework and master
507 * @param regionInfo the regionInfo of the region
508 */
509 void postAssign(final ObserverContext<MasterCoprocessorEnvironment> ctx,
510 final HRegionInfo regionInfo) throws IOException;
511
512 /**
513 * Called prior to unassigning a given region.
514 * @param ctx the environment to interact with the framework and master
515 * @param regionInfo
516 * @param force whether to force unassignment or not
517 */
518 void preUnassign(final ObserverContext<MasterCoprocessorEnvironment> ctx,
519 final HRegionInfo regionInfo, final boolean force) throws IOException;
520
521 /**
522 * Called after the region unassignment has been requested.
523 * @param ctx the environment to interact with the framework and master
524 * @param regionInfo
525 * @param force whether to force unassignment or not
526 */
527 void postUnassign(final ObserverContext<MasterCoprocessorEnvironment> ctx,
528 final HRegionInfo regionInfo, final boolean force) throws IOException;
529
530 /**
531 * Called prior to marking a given region as offline. <code>ctx.bypass()</code> will not have any
532 * impact on this hook.
533 * @param ctx the environment to interact with the framework and master
534 * @param regionInfo
535 */
536 void preRegionOffline(final ObserverContext<MasterCoprocessorEnvironment> ctx,
537 final HRegionInfo regionInfo) throws IOException;
538
539 /**
540 * Called after the region has been marked offline.
541 * @param ctx the environment to interact with the framework and master
542 * @param regionInfo
543 */
544 void postRegionOffline(final ObserverContext<MasterCoprocessorEnvironment> ctx,
545 final HRegionInfo regionInfo) throws IOException;
546
547 /**
548 * Called prior to requesting rebalancing of the cluster regions, though after
549 * the initial checks for regions in transition and the balance switch flag.
550 * @param ctx the environment to interact with the framework and master
551 */
552 void preBalance(final ObserverContext<MasterCoprocessorEnvironment> ctx)
553 throws IOException;
554
555 /**
556 * Called after the balancing plan has been submitted.
557 * @param ctx the environment to interact with the framework and master
558 * @param plans the RegionPlans which master has executed. RegionPlan serves as hint
559 * as for the final destination for the underlying region but may not represent the
560 * final state of assignment
561 */
562 void postBalance(final ObserverContext<MasterCoprocessorEnvironment> ctx, List<RegionPlan> plans)
563 throws IOException;
564
565 /**
566 * Called prior to modifying the flag used to enable/disable region balancing.
567 * @param ctx the coprocessor instance's environment
568 * @param newValue the new flag value submitted in the call
569 */
570 boolean preBalanceSwitch(final ObserverContext<MasterCoprocessorEnvironment> ctx,
571 final boolean newValue) throws IOException;
572
573 /**
574 * Called after the flag to enable/disable balancing has changed.
575 * @param ctx the coprocessor instance's environment
576 * @param oldValue the previously set balanceSwitch value
577 * @param newValue the newly set balanceSwitch value
578 */
579 void postBalanceSwitch(final ObserverContext<MasterCoprocessorEnvironment> ctx,
580 final boolean oldValue, final boolean newValue) throws IOException;
581
582 /**
583 * Called prior to shutting down the full HBase cluster, including this
584 * {@link org.apache.hadoop.hbase.master.HMaster} process.
585 */
586 void preShutdown(final ObserverContext<MasterCoprocessorEnvironment> ctx)
587 throws IOException;
588
589
590 /**
591 * Called immediately prior to stopping this
592 * {@link org.apache.hadoop.hbase.master.HMaster} process.
593 */
594 void preStopMaster(final ObserverContext<MasterCoprocessorEnvironment> ctx)
595 throws IOException;
596
597 /**
598 * Called immediately after an active master instance has completed
599 * initialization. Will not be called on standby master instances unless
600 * they take over the active role.
601 */
602 void postStartMaster(final ObserverContext<MasterCoprocessorEnvironment> ctx)
603 throws IOException;
604
605 /**
606 * Call before the master initialization is set to true.
607 * {@link org.apache.hadoop.hbase.master.HMaster} process.
608 */
609 void preMasterInitialization(final ObserverContext<MasterCoprocessorEnvironment> ctx)
610 throws IOException;
611
612 /**
613 * Called before a new snapshot is taken.
614 * Called as part of snapshot RPC call.
615 * It can't bypass the default action, e.g., ctx.bypass() won't have effect.
616 * @param ctx the environment to interact with the framework and master
617 * @param snapshot the SnapshotDescriptor for the snapshot
618 * @param hTableDescriptor the hTableDescriptor of the table to snapshot
619 * @throws IOException
620 */
621 void preSnapshot(final ObserverContext<MasterCoprocessorEnvironment> ctx,
622 final SnapshotDescription snapshot, final HTableDescriptor hTableDescriptor)
623 throws IOException;
624
625 /**
626 * Called after the snapshot operation has been requested.
627 * Called as part of snapshot RPC call.
628 * @param ctx the environment to interact with the framework and master
629 * @param snapshot the SnapshotDescriptor for the snapshot
630 * @param hTableDescriptor the hTableDescriptor of the table to snapshot
631 * @throws IOException
632 */
633 void postSnapshot(final ObserverContext<MasterCoprocessorEnvironment> ctx,
634 final SnapshotDescription snapshot, final HTableDescriptor hTableDescriptor)
635 throws IOException;
636
637 /**
638 * Called before listSnapshots request has been processed.
639 * It can't bypass the default action, e.g., ctx.bypass() won't have effect.
640 * @param ctx the environment to interact with the framework and master
641 * @param snapshot the SnapshotDescriptor of the snapshot to list
642 * @throws IOException
643 */
644 void preListSnapshot(final ObserverContext<MasterCoprocessorEnvironment> ctx,
645 final SnapshotDescription snapshot) throws IOException;
646
647 /**
648 * Called after listSnapshots request has been processed.
649 * It can't bypass the default action, e.g., ctx.bypass() won't have effect.
650 * @param ctx the environment to interact with the framework and master
651 * @param snapshot the SnapshotDescriptor of the snapshot to list
652 * @throws IOException
653 */
654 void postListSnapshot(final ObserverContext<MasterCoprocessorEnvironment> ctx,
655 final SnapshotDescription snapshot) throws IOException;
656
657 /**
658 * Called before a snapshot is cloned.
659 * Called as part of restoreSnapshot RPC call.
660 * It can't bypass the default action, e.g., ctx.bypass() won't have effect.
661 * @param ctx the environment to interact with the framework and master
662 * @param snapshot the SnapshotDescriptor for the snapshot
663 * @param hTableDescriptor the hTableDescriptor of the table to create
664 * @throws IOException
665 */
666 void preCloneSnapshot(final ObserverContext<MasterCoprocessorEnvironment> ctx,
667 final SnapshotDescription snapshot, final HTableDescriptor hTableDescriptor)
668 throws IOException;
669
670 /**
671 * Called after a snapshot clone operation has been requested.
672 * Called as part of restoreSnapshot RPC call.
673 * @param ctx the environment to interact with the framework and master
674 * @param snapshot the SnapshotDescriptor for the snapshot
675 * @param hTableDescriptor the hTableDescriptor of the table to create
676 * @throws IOException
677 */
678 void postCloneSnapshot(final ObserverContext<MasterCoprocessorEnvironment> ctx,
679 final SnapshotDescription snapshot, final HTableDescriptor hTableDescriptor)
680 throws IOException;
681
682 /**
683 * Called before a snapshot is restored.
684 * Called as part of restoreSnapshot RPC call.
685 * It can't bypass the default action, e.g., ctx.bypass() won't have effect.
686 * @param ctx the environment to interact with the framework and master
687 * @param snapshot the SnapshotDescriptor for the snapshot
688 * @param hTableDescriptor the hTableDescriptor of the table to restore
689 * @throws IOException
690 */
691 void preRestoreSnapshot(final ObserverContext<MasterCoprocessorEnvironment> ctx,
692 final SnapshotDescription snapshot, final HTableDescriptor hTableDescriptor)
693 throws IOException;
694
695 /**
696 * Called after a snapshot restore operation has been requested.
697 * Called as part of restoreSnapshot RPC call.
698 * @param ctx the environment to interact with the framework and master
699 * @param snapshot the SnapshotDescriptor for the snapshot
700 * @param hTableDescriptor the hTableDescriptor of the table to restore
701 * @throws IOException
702 */
703 void postRestoreSnapshot(final ObserverContext<MasterCoprocessorEnvironment> ctx,
704 final SnapshotDescription snapshot, final HTableDescriptor hTableDescriptor)
705 throws IOException;
706
707 /**
708 * Called before a snapshot is deleted.
709 * Called as part of deleteSnapshot RPC call.
710 * It can't bypass the default action, e.g., ctx.bypass() won't have effect.
711 * @param ctx the environment to interact with the framework and master
712 * @param snapshot the SnapshotDescriptor of the snapshot to delete
713 * @throws IOException
714 */
715 void preDeleteSnapshot(final ObserverContext<MasterCoprocessorEnvironment> ctx,
716 final SnapshotDescription snapshot) throws IOException;
717
718 /**
719 * Called after the delete snapshot operation has been requested.
720 * Called as part of deleteSnapshot RPC call.
721 * @param ctx the environment to interact with the framework and master
722 * @param snapshot the SnapshotDescriptor of the snapshot to delete
723 * @throws IOException
724 */
725 void postDeleteSnapshot(final ObserverContext<MasterCoprocessorEnvironment> ctx,
726 final SnapshotDescription snapshot) throws IOException;
727
728 /**
729 * Called before a getTableDescriptors request has been processed.
730 * @param ctx the environment to interact with the framework and master
731 * @param tableNamesList the list of table names, or null if querying for all
732 * @param descriptors an empty list, can be filled with what to return if bypassing
733 * @throws IOException
734 * @deprecated Use preGetTableDescriptors with regex instead.
735 */
736 @Deprecated
737 void preGetTableDescriptors(ObserverContext<MasterCoprocessorEnvironment> ctx,
738 List<TableName> tableNamesList, List<HTableDescriptor> descriptors) throws IOException;
739
740 /**
741 * Called after a getTableDescriptors request has been processed.
742 * @param ctx the environment to interact with the framework and master
743 * @param descriptors the list of descriptors about to be returned
744 * @throws IOException
745 * @deprecated Use postGetTableDescriptors with regex instead.
746 */
747 @Deprecated
748 void postGetTableDescriptors(ObserverContext<MasterCoprocessorEnvironment> ctx,
749 List<HTableDescriptor> descriptors) throws IOException;
750
751 /**
752 * Called before a getTableDescriptors request has been processed.
753 * @param ctx the environment to interact with the framework and master
754 * @param tableNamesList the list of table names, or null if querying for all
755 * @param descriptors an empty list, can be filled with what to return if bypassing
756 * @param regex regular expression used for filtering the table names
757 * @throws IOException
758 */
759 void preGetTableDescriptors(ObserverContext<MasterCoprocessorEnvironment> ctx,
760 List<TableName> tableNamesList, List<HTableDescriptor> descriptors,
761 String regex) throws IOException;
762
763 /**
764 * Called after a getTableDescriptors request has been processed.
765 * @param ctx the environment to interact with the framework and master
766 * @param tableNamesList the list of table names, or null if querying for all
767 * @param descriptors the list of descriptors about to be returned
768 * @param regex regular expression used for filtering the table names
769 * @throws IOException
770 */
771 void postGetTableDescriptors(ObserverContext<MasterCoprocessorEnvironment> ctx,
772 List<TableName> tableNamesList, List<HTableDescriptor> descriptors,
773 String regex) throws IOException;
774
775 /**
776 * Called before a getTableNames request has been processed.
777 * @param ctx the environment to interact with the framework and master
778 * @param descriptors an empty list, can be filled with what to return if bypassing
779 * @param regex regular expression used for filtering the table names
780 * @throws IOException
781 */
782 void preGetTableNames(ObserverContext<MasterCoprocessorEnvironment> ctx,
783 List<HTableDescriptor> descriptors, String regex) throws IOException;
784
785 /**
786 * Called after a getTableNames request has been processed.
787 * @param ctx the environment to interact with the framework and master
788 * @param descriptors the list of descriptors about to be returned
789 * @param regex regular expression used for filtering the table names
790 * @throws IOException
791 */
792 void postGetTableNames(ObserverContext<MasterCoprocessorEnvironment> ctx,
793 List<HTableDescriptor> descriptors, String regex) throws IOException;
794
795 /**
796 * Called before a new namespace is created by
797 * {@link org.apache.hadoop.hbase.master.HMaster}.
798 * It can't bypass the default action, e.g., ctx.bypass() won't have effect.
799 * @param ctx the environment to interact with the framework and master
800 * @param ns the NamespaceDescriptor for the table
801 * @throws IOException
802 */
803 void preCreateNamespace(final ObserverContext<MasterCoprocessorEnvironment> ctx,
804 NamespaceDescriptor ns) throws IOException;
805 /**
806 * Called after the createNamespace operation has been requested.
807 * @param ctx the environment to interact with the framework and master
808 * @param ns the NamespaceDescriptor for the table
809 * @throws IOException
810 */
811 void postCreateNamespace(final ObserverContext<MasterCoprocessorEnvironment> ctx,
812 NamespaceDescriptor ns) throws IOException;
813
814 /**
815 * Called before {@link org.apache.hadoop.hbase.master.HMaster} deletes a
816 * namespace
817 * It can't bypass the default action, e.g., ctx.bypass() won't have effect.
818 * @param ctx the environment to interact with the framework and master
819 * @param namespace the name of the namespace
820 */
821 void preDeleteNamespace(final ObserverContext<MasterCoprocessorEnvironment> ctx,
822 String namespace) throws IOException;
823
824 /**
825 * Called after the deleteNamespace operation has been requested.
826 * @param ctx the environment to interact with the framework and master
827 * @param namespace the name of the namespace
828 */
829 void postDeleteNamespace(final ObserverContext<MasterCoprocessorEnvironment> ctx,
830 String namespace) throws IOException;
831
832 /**
833 * Called prior to modifying a namespace's properties.
834 * It can't bypass the default action, e.g., ctx.bypass() won't have effect.
835 * @param ctx the environment to interact with the framework and master
836 * @param ns the NamespaceDescriptor
837 */
838 void preModifyNamespace(final ObserverContext<MasterCoprocessorEnvironment> ctx,
839 NamespaceDescriptor ns) throws IOException;
840
841 /**
842 * Called after the modifyNamespace operation has been requested.
843 * @param ctx the environment to interact with the framework and master
844 * @param ns the NamespaceDescriptor
845 */
846 void postModifyNamespace(final ObserverContext<MasterCoprocessorEnvironment> ctx,
847 NamespaceDescriptor ns) throws IOException;
848
849 /**
850 * Called before a getNamespaceDescriptor request has been processed.
851 * @param ctx the environment to interact with the framework and master
852 * @param namespace the name of the namespace
853 * @throws IOException
854 */
855 void preGetNamespaceDescriptor(ObserverContext<MasterCoprocessorEnvironment> ctx,
856 String namespace) throws IOException;
857
858 /**
859 * Called after a getNamespaceDescriptor request has been processed.
860 * @param ctx the environment to interact with the framework and master
861 * @param ns the NamespaceDescriptor
862 * @throws IOException
863 */
864 void postGetNamespaceDescriptor(ObserverContext<MasterCoprocessorEnvironment> ctx,
865 NamespaceDescriptor ns) throws IOException;
866
867 /**
868 * Called before a listNamespaceDescriptors request has been processed.
869 * @param ctx the environment to interact with the framework and master
870 * @param descriptors an empty list, can be filled with what to return if bypassing
871 * @throws IOException
872 */
873 void preListNamespaceDescriptors(ObserverContext<MasterCoprocessorEnvironment> ctx,
874 List<NamespaceDescriptor> descriptors) throws IOException;
875
876 /**
877 * Called after a listNamespaceDescriptors request has been processed.
878 * @param ctx the environment to interact with the framework and master
879 * @param descriptors the list of descriptors about to be returned
880 * @throws IOException
881 */
882 void postListNamespaceDescriptors(ObserverContext<MasterCoprocessorEnvironment> ctx,
883 List<NamespaceDescriptor> descriptors) throws IOException;
884
885
886 /**
887 * Called before the table memstore is flushed to disk.
888 * @param ctx the environment to interact with the framework and master
889 * @param tableName the name of the table
890 * @throws IOException
891 */
892 void preTableFlush(final ObserverContext<MasterCoprocessorEnvironment> ctx,
893 final TableName tableName) throws IOException;
894
895 /**
896 * Called after the table memstore is flushed to disk.
897 * @param ctx the environment to interact with the framework and master
898 * @param tableName the name of the table
899 * @throws IOException
900 */
901 void postTableFlush(final ObserverContext<MasterCoprocessorEnvironment> ctx,
902 final TableName tableName) throws IOException;
903
904 /**
905 * Called before the quota for the user is stored.
906 * @param ctx the environment to interact with the framework and master
907 * @param userName the name of user
908 * @param quotas the quota settings
909 * @throws IOException
910 */
911 void preSetUserQuota(final ObserverContext<MasterCoprocessorEnvironment> ctx,
912 final String userName, final Quotas quotas) throws IOException;
913
914 /**
915 * Called after the quota for the user is stored.
916 * @param ctx the environment to interact with the framework and master
917 * @param userName the name of user
918 * @param quotas the quota settings
919 * @throws IOException
920 */
921 void postSetUserQuota(final ObserverContext<MasterCoprocessorEnvironment> ctx,
922 final String userName, final Quotas quotas) throws IOException;
923
924 /**
925 * Called before the quota for the user on the specified table is stored.
926 * @param ctx the environment to interact with the framework and master
927 * @param userName the name of user
928 * @param tableName the name of the table
929 * @param quotas the quota settings
930 * @throws IOException
931 */
932 void preSetUserQuota(final ObserverContext<MasterCoprocessorEnvironment> ctx,
933 final String userName, final TableName tableName, final Quotas quotas) throws IOException;
934
935 /**
936 * Called after the quota for the user on the specified table is stored.
937 * @param ctx the environment to interact with the framework and master
938 * @param userName the name of user
939 * @param tableName the name of the table
940 * @param quotas the quota settings
941 * @throws IOException
942 */
943 void postSetUserQuota(final ObserverContext<MasterCoprocessorEnvironment> ctx,
944 final String userName, final TableName tableName, final Quotas quotas) throws IOException;
945
946 /**
947 * Called before the quota for the user on the specified namespace is stored.
948 * @param ctx the environment to interact with the framework and master
949 * @param userName the name of user
950 * @param namespace the name of the namespace
951 * @param quotas the quota settings
952 * @throws IOException
953 */
954 void preSetUserQuota(final ObserverContext<MasterCoprocessorEnvironment> ctx,
955 final String userName, final String namespace, final Quotas quotas) throws IOException;
956
957 /**
958 * Called after the quota for the user on the specified namespace is stored.
959 * @param ctx the environment to interact with the framework and master
960 * @param userName the name of user
961 * @param namespace the name of the namespace
962 * @param quotas the quota settings
963 * @throws IOException
964 */
965 void postSetUserQuota(final ObserverContext<MasterCoprocessorEnvironment> ctx,
966 final String userName, final String namespace, final Quotas quotas) throws IOException;
967
968 /**
969 * Called before the quota for the table is stored.
970 * @param ctx the environment to interact with the framework and master
971 * @param tableName the name of the table
972 * @param quotas the quota settings
973 * @throws IOException
974 */
975 void preSetTableQuota(final ObserverContext<MasterCoprocessorEnvironment> ctx,
976 final TableName tableName, final Quotas quotas) throws IOException;
977
978 /**
979 * Called after the quota for the table is stored.
980 * @param ctx the environment to interact with the framework and master
981 * @param tableName the name of the table
982 * @param quotas the quota settings
983 * @throws IOException
984 */
985 void postSetTableQuota(final ObserverContext<MasterCoprocessorEnvironment> ctx,
986 final TableName tableName, final Quotas quotas) throws IOException;
987
988 /**
989 * Called before the quota for the namespace is stored.
990 * @param ctx the environment to interact with the framework and master
991 * @param namespace the name of the namespace
992 * @param quotas the quota settings
993 * @throws IOException
994 */
995 void preSetNamespaceQuota(final ObserverContext<MasterCoprocessorEnvironment> ctx,
996 final String namespace, final Quotas quotas) throws IOException;
997
998 /**
999 * Called after the quota for the namespace is stored.
1000 * @param ctx the environment to interact with the framework and master
1001 * @param namespace the name of the namespace
1002 * @param quotas the quota settings
1003 * @throws IOException
1004 */
1005 void postSetNamespaceQuota(final ObserverContext<MasterCoprocessorEnvironment> ctx,
1006 final String namespace, final Quotas quotas) throws IOException;
1007 }