Index: src/main/java/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java (revision 1553055) +++ src/main/java/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java (working copy) @@ -153,6 +153,15 @@ // load Coprocessor From HDFS loadTableCoprocessors(conf); + + // remove anything that does not implement RegionObserver (i.e. endpoints) + List toRemove = new ArrayList(); + for (RegionEnvironment env: coprocessors) { + if (!(env.getInstance() instanceof RegionObserver)) { + toRemove.add(env); + } + } + coprocessors.removeAll(toRemove); } void loadTableCoprocessors(final Configuration conf) { @@ -273,7 +282,6 @@ public void preOpen(){ ObserverContext ctx = null; for (RegionEnvironment env: coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { ((RegionObserver)env.getInstance()).preOpen(ctx); @@ -283,7 +291,6 @@ if (ctx.shouldComplete()) { break; } - } } } @@ -293,7 +300,6 @@ public void postOpen(){ ObserverContext ctx = null; for (RegionEnvironment env: coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { ((RegionObserver)env.getInstance()).postOpen(ctx); @@ -303,7 +309,6 @@ if (ctx.shouldComplete()) { break; } - } } } @@ -314,14 +319,12 @@ public void preClose(boolean abortRequested) throws IOException { ObserverContext ctx = null; for (RegionEnvironment env: coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { ((RegionObserver)env.getInstance()).preClose(ctx, abortRequested); } catch (Throwable e) { handleCoprocessorThrowable(env, e); } - } } } @@ -332,7 +335,6 @@ public void postClose(boolean abortRequested){ ObserverContext ctx = null; for (RegionEnvironment env: coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { ((RegionObserver)env.getInstance()).postClose(ctx, abortRequested); @@ -340,7 +342,6 @@ handleCoprocessorThrowableNoRethrow(env, e); } - } shutdown(env); } } @@ -354,7 +355,6 @@ ObserverContext ctx = null; InternalScanner s = null; for (RegionEnvironment env: coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { s = ((RegionObserver) env.getInstance()).preCompactScannerOpen(ctx, store, scanners, @@ -365,7 +365,6 @@ if (ctx.shouldComplete()) { break; } - } } return s; } @@ -384,7 +383,6 @@ ObserverContext ctx = null; boolean bypass = false; for (RegionEnvironment env: coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { ((RegionObserver) env.getInstance()).preCompactSelection(ctx, store, candidates, request); @@ -395,7 +393,6 @@ if (ctx.shouldComplete()) { break; } - } } return bypass; } @@ -411,7 +408,6 @@ CompactionRequest request) { ObserverContext ctx = null; for (RegionEnvironment env: coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { ((RegionObserver) env.getInstance()).postCompactSelection(ctx, store, selected, request); @@ -421,7 +417,6 @@ if (ctx.shouldComplete()) { break; } - } } } @@ -437,7 +432,6 @@ ObserverContext ctx = null; boolean bypass = false; for (RegionEnvironment env : coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { scanner = ((RegionObserver) env.getInstance()).preCompact(ctx, store, scanner, request); @@ -448,7 +442,6 @@ if (ctx.shouldComplete()) { break; } - } } return bypass ? null : scanner; } @@ -464,7 +457,6 @@ throws IOException { ObserverContext ctx = null; for (RegionEnvironment env: coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { ((RegionObserver) env.getInstance()).postCompact(ctx, store, resultFile, request); @@ -474,7 +466,6 @@ if (ctx.shouldComplete()) { break; } - } } } @@ -486,7 +477,6 @@ ObserverContext ctx = null; boolean bypass = false; for (RegionEnvironment env: coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { scanner = ((RegionObserver)env.getInstance()).preFlush( @@ -498,7 +488,6 @@ if (ctx.shouldComplete()) { break; } - } } return bypass ? null : scanner; } @@ -510,7 +499,6 @@ public void preFlush() throws IOException { ObserverContext ctx = null; for (RegionEnvironment env: coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { ((RegionObserver)env.getInstance()).preFlush(ctx); @@ -520,7 +508,6 @@ if (ctx.shouldComplete()) { break; } - } } } @@ -532,7 +519,6 @@ ObserverContext ctx = null; InternalScanner s = null; for (RegionEnvironment env : coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { s = ((RegionObserver) env.getInstance()).preFlushScannerOpen(ctx, store, memstoreScanner, s); @@ -542,7 +528,6 @@ if (ctx.shouldComplete()) { break; } - } } return s; } @@ -554,7 +539,6 @@ public void postFlush() throws IOException { ObserverContext ctx = null; for (RegionEnvironment env: coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { ((RegionObserver)env.getInstance()).postFlush(ctx); @@ -564,7 +548,6 @@ if (ctx.shouldComplete()) { break; } - } } } @@ -575,7 +558,6 @@ public void postFlush(final Store store, final StoreFile storeFile) throws IOException { ObserverContext ctx = null; for (RegionEnvironment env: coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { ((RegionObserver)env.getInstance()).postFlush(ctx, store, storeFile); @@ -585,7 +567,6 @@ if (ctx.shouldComplete()) { break; } - } } } @@ -596,7 +577,6 @@ public void preSplit() throws IOException { ObserverContext ctx = null; for (RegionEnvironment env: coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { ((RegionObserver)env.getInstance()).preSplit(ctx); @@ -606,7 +586,6 @@ if (ctx.shouldComplete()) { break; } - } } } @@ -619,7 +598,6 @@ public void postSplit(HRegion l, HRegion r) throws IOException { ObserverContext ctx = null; for (RegionEnvironment env: coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { ((RegionObserver)env.getInstance()).postSplit(ctx, l, r); @@ -629,7 +607,6 @@ if (ctx.shouldComplete()) { break; } - } } } @@ -647,7 +624,6 @@ boolean bypass = false; ObserverContext ctx = null; for (RegionEnvironment env: coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { ((RegionObserver)env.getInstance()).preGetClosestRowBefore(ctx, row, @@ -659,7 +635,6 @@ if (ctx.shouldComplete()) { break; } - } } return bypass; } @@ -674,7 +649,6 @@ final Result result) throws IOException { ObserverContext ctx = null; for (RegionEnvironment env: coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { ((RegionObserver)env.getInstance()).postGetClosestRowBefore(ctx, row, @@ -685,7 +659,6 @@ if (ctx.shouldComplete()) { break; } - } } } @@ -699,7 +672,6 @@ boolean bypass = false; ObserverContext ctx = null; for (RegionEnvironment env: coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { ((RegionObserver)env.getInstance()).preGet(ctx, get, results); @@ -710,7 +682,6 @@ if (ctx.shouldComplete()) { break; } - } } return bypass; } @@ -724,7 +695,6 @@ throws IOException { ObserverContext ctx = null; for (RegionEnvironment env: coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { ((RegionObserver)env.getInstance()).postGet(ctx, get, results); @@ -734,7 +704,6 @@ if (ctx.shouldComplete()) { break; } - } } } @@ -749,7 +718,6 @@ boolean exists = false; ObserverContext ctx = null; for (RegionEnvironment env: coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { exists = ((RegionObserver)env.getInstance()).preExists(ctx, get, exists); @@ -760,7 +728,6 @@ if (ctx.shouldComplete()) { break; } - } } return bypass ? exists : null; } @@ -775,7 +742,6 @@ throws IOException { ObserverContext ctx = null; for (RegionEnvironment env: coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { exists = ((RegionObserver)env.getInstance()).postExists(ctx, get, exists); @@ -785,7 +751,6 @@ if (ctx.shouldComplete()) { break; } - } } return exists; } @@ -802,7 +767,6 @@ boolean bypass = false; ObserverContext ctx = null; for (RegionEnvironment env: coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { ((RegionObserver)env.getInstance()).prePut(ctx, put, edit, writeToWAL); @@ -813,7 +777,6 @@ if (ctx.shouldComplete()) { break; } - } } return bypass; } @@ -828,7 +791,6 @@ final boolean writeToWAL) throws IOException { ObserverContext ctx = null; for (RegionEnvironment env: coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { ((RegionObserver)env.getInstance()).postPut(ctx, put, edit, writeToWAL); @@ -838,7 +800,6 @@ if (ctx.shouldComplete()) { break; } - } } } @@ -854,7 +815,6 @@ boolean bypass = false; ObserverContext ctx = null; for (RegionEnvironment env: coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { ((RegionObserver)env.getInstance()).preDelete(ctx, delete, edit, writeToWAL); @@ -865,7 +825,6 @@ if (ctx.shouldComplete()) { break; } - } } return bypass; } @@ -880,7 +839,6 @@ final boolean writeToWAL) throws IOException { ObserverContext ctx = null; for (RegionEnvironment env: coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { ((RegionObserver)env.getInstance()).postDelete(ctx, delete, edit, writeToWAL); @@ -890,7 +848,6 @@ if (ctx.shouldComplete()) { break; } - } } } @@ -904,7 +861,6 @@ boolean bypass = false; ObserverContext ctx = null; for (RegionEnvironment env : coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { ((RegionObserver) env.getInstance()).preBatchMutate(ctx, miniBatchOp); @@ -915,7 +871,6 @@ if (ctx.shouldComplete()) { break; } - } } return bypass; } @@ -928,7 +883,6 @@ final MiniBatchOperationInProgress> miniBatchOp) throws IOException { ObserverContext ctx = null; for (RegionEnvironment env : coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { ((RegionObserver) env.getInstance()).postBatchMutate(ctx, miniBatchOp); @@ -938,7 +892,6 @@ if (ctx.shouldComplete()) { break; } - } } } @@ -961,7 +914,6 @@ boolean result = false; ObserverContext ctx = null; for (RegionEnvironment env: coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { result = ((RegionObserver)env.getInstance()).preCheckAndPut(ctx, row, family, @@ -975,7 +927,6 @@ if (ctx.shouldComplete()) { break; } - } } return bypass ? result : null; } @@ -996,7 +947,6 @@ throws IOException { ObserverContext ctx = null; for (RegionEnvironment env: coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { result = ((RegionObserver)env.getInstance()).postCheckAndPut(ctx, row, @@ -1007,7 +957,6 @@ if (ctx.shouldComplete()) { break; } - } } return result; } @@ -1031,7 +980,6 @@ boolean result = false; ObserverContext ctx = null; for (RegionEnvironment env: coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { result = ((RegionObserver)env.getInstance()).preCheckAndDelete(ctx, row, @@ -1043,7 +991,6 @@ if (ctx.shouldComplete()) { break; } - } } return bypass ? result : null; } @@ -1064,7 +1011,6 @@ throws IOException { ObserverContext ctx = null; for (RegionEnvironment env: coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { result = ((RegionObserver)env.getInstance()) @@ -1076,7 +1022,6 @@ if (ctx.shouldComplete()) { break; } - } } return result; } @@ -1097,7 +1042,6 @@ boolean bypass = false; ObserverContext ctx = null; for (RegionEnvironment env: coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { amount = ((RegionObserver)env.getInstance()).preIncrementColumnValue(ctx, @@ -1109,7 +1053,6 @@ if (ctx.shouldComplete()) { break; } - } } return bypass ? amount : null; } @@ -1129,7 +1072,6 @@ long result) throws IOException { ObserverContext ctx = null; for (RegionEnvironment env: coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { result = ((RegionObserver)env.getInstance()).postIncrementColumnValue(ctx, @@ -1140,7 +1082,6 @@ if (ctx.shouldComplete()) { break; } - } } return result; } @@ -1157,7 +1098,6 @@ Result result = null; ObserverContext ctx = null; for (RegionEnvironment env: coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { result = ((RegionObserver)env.getInstance()).preAppend(ctx, append); @@ -1168,7 +1108,6 @@ if (ctx.shouldComplete()) { break; } - } } return bypass ? result : null; } @@ -1185,7 +1124,6 @@ Result result = null; ObserverContext ctx = null; for (RegionEnvironment env: coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { result = ((RegionObserver)env.getInstance()).preIncrement(ctx, increment); @@ -1196,7 +1134,6 @@ if (ctx.shouldComplete()) { break; } - } } return bypass ? result : null; } @@ -1210,7 +1147,6 @@ throws IOException { ObserverContext ctx = null; for (RegionEnvironment env: coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { ((RegionObserver)env.getInstance()).postAppend(ctx, append, result); @@ -1220,7 +1156,6 @@ if (ctx.shouldComplete()) { break; } - } } } @@ -1233,7 +1168,6 @@ throws IOException { ObserverContext ctx = null; for (RegionEnvironment env: coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { result = ((RegionObserver)env.getInstance()).postIncrement(ctx, increment, result); @@ -1243,7 +1177,6 @@ if (ctx.shouldComplete()) { break; } - } } return result; } @@ -1259,7 +1192,6 @@ RegionScanner s = null; ObserverContext ctx = null; for (RegionEnvironment env: coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { s = ((RegionObserver)env.getInstance()).preScannerOpen(ctx, scan, s); @@ -1270,7 +1202,6 @@ if (ctx.shouldComplete()) { break; } - } } return bypass ? s : null; } @@ -1284,7 +1215,6 @@ KeyValueScanner s = null; ObserverContext ctx = null; for (RegionEnvironment env: coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { s = ((RegionObserver) env.getInstance()).preStoreScannerOpen(ctx, store, scan, @@ -1295,7 +1225,6 @@ if (ctx.shouldComplete()) { break; } - } } return s; } @@ -1310,7 +1239,6 @@ throws IOException { ObserverContext ctx = null; for (RegionEnvironment env: coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { s = ((RegionObserver)env.getInstance()).postScannerOpen(ctx, scan, s); @@ -1320,7 +1248,6 @@ if (ctx.shouldComplete()) { break; } - } } return s; } @@ -1339,7 +1266,6 @@ boolean hasNext = false; ObserverContext ctx = null; for (RegionEnvironment env: coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { hasNext = ((RegionObserver)env.getInstance()).preScannerNext(ctx, s, results, @@ -1351,7 +1277,6 @@ if (ctx.shouldComplete()) { break; } - } } return bypass ? hasNext : null; } @@ -1369,7 +1294,6 @@ throws IOException { ObserverContext ctx = null; for (RegionEnvironment env: coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { hasMore = ((RegionObserver)env.getInstance()).postScannerNext(ctx, s, @@ -1380,7 +1304,6 @@ if (ctx.shouldComplete()) { break; } - } } return hasMore; } @@ -1398,7 +1321,6 @@ boolean hasMore = true; // By default assume more rows there. ObserverContext ctx = null; for (RegionEnvironment env : coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { hasMore = ((RegionObserver) env.getInstance()).postScannerFilterRow(ctx, s, currentRow, @@ -1409,7 +1331,6 @@ if (ctx.shouldComplete()) { break; } - } } return hasMore; } @@ -1424,7 +1345,6 @@ boolean bypass = false; ObserverContext ctx = null; for (RegionEnvironment env: coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { ((RegionObserver)env.getInstance()).preScannerClose(ctx, s); @@ -1435,7 +1355,6 @@ if (ctx.shouldComplete()) { break; } - } } return bypass; } @@ -1448,7 +1367,6 @@ throws IOException { ObserverContext ctx = null; for (RegionEnvironment env: coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { ((RegionObserver)env.getInstance()).postScannerClose(ctx, s); @@ -1458,7 +1376,6 @@ if (ctx.shouldComplete()) { break; } - } } } @@ -1474,7 +1391,6 @@ boolean bypass = false; ObserverContext ctx = null; for (RegionEnvironment env: coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { ((RegionObserver)env.getInstance()).preWALRestore(ctx, info, logKey, @@ -1486,7 +1402,6 @@ if (ctx.shouldComplete()) { break; } - } } return bypass; } @@ -1501,7 +1416,6 @@ WALEdit logEdit) throws IOException { ObserverContext ctx = null; for (RegionEnvironment env: coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { ((RegionObserver)env.getInstance()).postWALRestore(ctx, info, @@ -1512,7 +1426,6 @@ if (ctx.shouldComplete()) { break; } - } } } @@ -1525,7 +1438,6 @@ boolean bypass = false; ObserverContext ctx = null; for (RegionEnvironment env: coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { ((RegionObserver)env.getInstance()).preBulkLoadHFile(ctx, familyPaths); @@ -1536,7 +1448,6 @@ if (ctx.shouldComplete()) { break; } - } } return bypass; @@ -1552,7 +1463,6 @@ throws IOException { ObserverContext ctx = null; for (RegionEnvironment env: coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); try { hasLoaded = ((RegionObserver)env.getInstance()).postBulkLoadHFile(ctx, @@ -1563,7 +1473,6 @@ if (ctx.shouldComplete()) { break; } - } } return hasLoaded; @@ -1572,26 +1481,22 @@ public void preLockRow(byte[] regionName, byte[] row) throws IOException { ObserverContext ctx = null; for (RegionEnvironment env : coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); ((RegionObserver) env.getInstance()).preLockRow(ctx, regionName, row); if (ctx.shouldComplete()) { break; } - } } } public void preUnLockRow(byte[] regionName, long lockId) throws IOException { ObserverContext ctx = null; for (RegionEnvironment env : coprocessors) { - if (env.getInstance() instanceof RegionObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); ((RegionObserver) env.getInstance()).preUnlockRow(ctx, regionName, lockId); if (ctx.shouldComplete()) { break; } - } } }