Uploaded image for project: 'HBase'
  1. HBase
  2. HBASE-7608 Considering Java 8
  3. HBASE-17312

[JDK8] Use default method for Observer Coprocessors

    XMLWordPrintableJSON

Details

    • Sub-task
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 2.0.0
    • 2.0.0
    • Coprocessors
    • Incompatible change, Reviewed
    • Hide
      Deletes BaseMasterAndRegionObserver, BaseMasterObserver, BaseRegionObserver, BaseRegionServerObserver and BaseWALObserver.
      Their corresponding interface classes now use JDK8's 'default' keyword to provide empty/no-op implementations so that:
      1. Derived class don't break when more coprocessor hooks are added in future.
      2. Derived classes don't have to redundantly override functions they don't care about with empty implementations.

      Earlier, BaseXXXObserver classes provided these exact two benefits, but with 'default' keyword in JDK8, they are not needed anymore.

      To fix the breakages because of this change, simply change "Foo extends BaseXXXObserver" to "Foo implements XXXObserver".
      Show
      Deletes BaseMasterAndRegionObserver, BaseMasterObserver, BaseRegionObserver, BaseRegionServerObserver and BaseWALObserver. Their corresponding interface classes now use JDK8's 'default' keyword to provide empty/no-op implementations so that: 1. Derived class don't break when more coprocessor hooks are added in future. 2. Derived classes don't have to redundantly override functions they don't care about with empty implementations. Earlier, BaseXXXObserver classes provided these exact two benefits, but with 'default' keyword in JDK8, they are not needed anymore. To fix the breakages because of this change, simply change "Foo extends BaseXXXObserver" to "Foo implements XXXObserver".

    Description

      In cases where one might need to use multiple observers, say region, master and regionserver; and the fact that only one class can be extended, it gives rise to following pattern:

          public class BaseMasterAndRegionObserver
            extends BaseRegionObserver
            implements MasterObserver
      
          class AccessController
            extends BaseMasterAndRegionObserver
            implements RegionServerObserver
      

      were BaseMasterAndRegionObserver is full copy of BaseMasterObserver.

      There is an example of simple case too where the current design fails.
      Say only one observer is needed by the coprocessor, but the design doesn't permit extending even that single observer (see RSGroupAdminEndpoint), that leads to full copy of Base...Observer class into coprocessor class leading to 1000s of lines of code and this ugly mix of 5 main functions with 100 useless functions.

      Attachments

        1. HBASE-17312.master.001.patch
          298 kB
          Guanghao Zhang
        2. HBASE-17312.master.001.patch
          298 kB
          Guanghao Zhang
        3. HBASE-17312.master.002.patch
          416 kB
          Apekshit Sharma
        4. HBASE-17312.master.003.patch
          419 kB
          Apekshit Sharma
        5. HBASE-17312.master.004.patch
          435 kB
          Apekshit Sharma
        6. HBASE-17312.master.005.patch
          434 kB
          Apekshit Sharma
        7. HBASE-17312.master.006.patch
          435 kB
          Apekshit Sharma

        Issue Links

          Activity

            People

              appy Apekshit Sharma
              zghao Guanghao Zhang
              Votes:
              0 Vote for this issue
              Watchers:
              12 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: