Hi, all, I am trying to learn how to share data between two coprocessors. I have one Observer coprocessor and one Endpoint coprocessor. In the observer, it overload the prePut/preDelete to maintain a counter. And I want the Endpoint coprocessor to read that counter and return to client caller. So I want to use the getSharedData() method in RegionCoprocessorEnvironment, but I cannot make it work. Could anybody help me here?
In the Observer Coprocessor : During start(), create the shared object "counter": ----------------------------------------------------------------- public void start(CoprocessorEnvironment envi) throws IOException { Env.getSharedData().put("counter", new Long(0) ); //create the counter ----------------------------------------------------------------- In the Endpoint coprocessor: During start(), try to read the shared "counter" , but failed. ------------------------------------------------------------------ public void start(CoprocessorEnvironment envi) throws IOException { LOG.info("The size of sharedData map is: " + envi.getSharedData().size() ); //try to get the counter ------------------------------------------------------------------ Here it print 0, if I use evni.getSharedData().containsKey("counter"), it will return false. When creating table, I call addCoprocessor() method to add Observer first, then Endpoint coprocessor. I confirmed that by checking the hbase log file message. I only have one region for that table during the run. I confirmed by hbase shell status 'detailed' command. There is not much example I can find about how to use getSharedData(), could someone help me here? What is missing in my simple code? Thanks very much in advance! Thanks, Ming