Hive
  1. Hive
  2. HIVE-2206

add a new optimizer for query correlation discovery and optimization

    Details

    • Type: New Feature New Feature
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 0.12.0
    • Fix Version/s: 0.12.0
    • Component/s: Query Processor
    • Labels:
      None
    • Release Note:
      This optimizer exploits the intra-query correlations and merge multiple correlated MapReduce jobs into one jobs.

      Description

      This issue proposes a new logical optimizer called Correlation Optimizer, which is used to merge correlated MapReduce jobs (MR jobs) into a single MR job. The idea is based on YSmart (http://ysmart.cse.ohio-state.edu/). The paper and slides of YSmart are linked at the bottom.

      Since Hive translates queries in a sentence by sentence fashion, for every operation which may need to shuffle the data (e.g. join and aggregation operations), Hive will generate a MapReduce job for that operation. However, for those operations which may need to shuffle the data, they may involve correlations explained below and thus can be executed in a single MR job.

      1. Input Correlation: Multiple MR jobs have input correlation (IC) if their input relation sets are not disjoint;
      2. Transit Correlation: Multiple MR jobs have transit correlation (TC) if they have not only input correlation, but also the same partition key;
      3. Job Flow Correlation: An MR has job flow correlation (JFC) with one of its child nodes if it has the same partition key as that child node.

      The current implementation of correlation optimizer only detect correlations among MR jobs for reduce-side join operators and reduce-side aggregation operators (not map only aggregation). A query will be optimized if it satisfies following conditions.

      1. There exists a MR job for reduce-side join operator or reduce side aggregation operator which have JFC with all of its parents MR jobs (TCs will be also exploited if JFC exists);
      2. All input tables of those correlated MR job are original input tables (not intermediate tables generated by sub-queries); and
      3. No self join is involved in those correlated MR jobs.

      Correlation optimizer is implemented as a logical optimizer. The main reasons are that it only needs to manipulate the query plan tree and it can leverage the existing component on generating MR jobs.

      Current implementation can serve as a framework for correlation related optimizations. I think that it is better than adding individual optimizers.

      There are several work that can be done in future to improve this optimizer. Here are three examples.

      1. Support queries only involve TC;
      2. Support queries in which input tables of correlated MR jobs involves intermediate tables; and
      3. Optimize queries involving self join.

      References:
      Paper and presentation of YSmart.
      Paper: http://www.cse.ohio-state.edu/hpcs/WWW/HTML/publications/papers/TR-11-7.pdf
      Slides: http://sdrv.ms/UpwJJc

      1. HIVE-2206.1.patch.txt
        190 kB
        Yin Huai
      2. HIVE-2206.10-r1384442.patch.txt
        341 kB
        Yin Huai
      3. HIVE-2206.11-r1385084.patch.txt
        250 kB
        Yin Huai
      4. HIVE-2206.12-r1386996.patch.txt
        308 kB
        Yin Huai
      5. HIVE-2206.13-r1389072.patch.txt
        500 kB
        Yin Huai
      6. HIVE-2206.14-r1389704.patch.txt
        499 kB
        Yin Huai
      7. HIVE-2206.15-r1392491.patch.txt
        492 kB
        Yin Huai
      8. HIVE-2206.16-r1399936.patch.txt
        492 kB
        Yin Huai
      9. HIVE-2206.17-r1404933.patch.txt
        491 kB
        Yin Huai
      10. HIVE-2206.18-r1407720.patch.txt
        491 kB
        Yin Huai
      11. HIVE-2206.19-r1410581.patch.txt
        508 kB
        Yin Huai
      12. HIVE-2206.2.patch.txt
        190 kB
        Yin Huai
      13. HIVE-2206.20-r1434012.patch.txt
        512 kB
        Yin Huai
      14. HIVE-2206.3.patch.txt
        190 kB
        Yin Huai
      15. HIVE-2206.4.patch.txt
        190 kB
        Yin Huai
      16. HIVE-2206.5.patch.txt
        255 kB
        Yin Huai
      17. HIVE-2206.5-1.patch.txt
        209 kB
        Yin Huai
      18. HIVE-2206.6.patch.txt
        156 kB
        Yin Huai
      19. HIVE-2206.7.patch.txt
        221 kB
        Yin Huai
      20. HIVE-2206.8.r1224646.patch.txt
        219 kB
        Yin Huai
      21. HIVE-2206.8-r1237253.patch.txt
        225 kB
        Yin Huai
      22. HIVE-2206.D11097.1.patch
        756 kB
        Phabricator
      23. HIVE-2206.D11097.10.patch
        980 kB
        Phabricator
      24. HIVE-2206.D11097.11.patch
        7 kB
        Phabricator
      25. HIVE-2206.D11097.12.patch
        1003 kB
        Phabricator
      26. HIVE-2206.D11097.13.patch
        1.03 MB
        Phabricator
      27. HIVE-2206.D11097.14.patch
        1.09 MB
        Phabricator
      28. HIVE-2206.D11097.15.patch
        1.10 MB
        Phabricator
      29. HIVE-2206.D11097.16.patch
        1.20 MB
        Phabricator
      30. HIVE-2206.D11097.17.patch
        1.19 MB
        Phabricator
      31. HIVE-2206.D11097.18.patch
        1.20 MB
        Phabricator
      32. HIVE-2206.D11097.19.patch
        1.20 MB
        Phabricator
      33. HIVE-2206.D11097.2.patch
        586 kB
        Phabricator
      34. HIVE-2206.D11097.20.patch
        46 kB
        Phabricator
      35. HIVE-2206.D11097.21.patch
        5 kB
        Phabricator
      36. HIVE-2206.D11097.22.patch
        5 kB
        Phabricator
      37. HIVE-2206.D11097.3.patch
        581 kB
        Phabricator
      38. HIVE-2206.D11097.4.patch
        581 kB
        Phabricator
      39. HIVE-2206.D11097.5.patch
        582 kB
        Phabricator
      40. HIVE-2206.D11097.6.patch
        698 kB
        Phabricator
      41. HIVE-2206.D11097.7.patch
        725 kB
        Phabricator
      42. HIVE-2206.D11097.8.patch
        868 kB
        Phabricator
      43. HIVE-2206.D11097.9.patch
        923 kB
        Phabricator
      44. HIVE-2206.patch
        1.20 MB
        Yin Huai
      45. testQueries.2.q
        5 kB
        Yin Huai
      46. YSmartPatchForHive.patch
        251 kB
        He Yongqiang

        Issue Links

          Activity

          He Yongqiang created issue -
          He Yongqiang made changes -
          Field Original Value New Value
          Attachment YSmartPatchForHive.patch [ 12481779 ]
          Yin Huai made changes -
          Attachment Queries [ 12481809 ]
          He Yongqiang made changes -
          Assignee Yin Huai [ yhuai ]
          Yin Huai made changes -
          Status Open [ 1 ] In Progress [ 3 ]
          Yin Huai made changes -
          Attachment HIVE-2206.1.patch.txt [ 12494950 ]
          Attachment testQueries.q [ 12494951 ]
          Yin Huai made changes -
          Status In Progress [ 3 ] Open [ 1 ]
          Yin Huai made changes -
          Status Open [ 1 ] In Progress [ 3 ]
          Yin Huai made changes -
          Attachment HIVE-2206.2.patch.txt [ 12494992 ]
          Yin Huai made changes -
          Attachment HIVE-2206.3.patch.txt [ 12495057 ]
          Yin Huai made changes -
          Status In Progress [ 3 ] Patch Available [ 10002 ]
          Release Note This optimizer exploits the intra-query correlations and merge multiple correlated MapReduce jobs into one jobs. The patch is generated based on hive-trunk with revision 1171917.
          Yin Huai made changes -
          Attachment HIVE-2206.4.patch.txt [ 12495161 ]
          Yin Huai made changes -
          Status Patch Available [ 10002 ] Open [ 1 ]
          Yin Huai made changes -
          Attachment HIVE-2206.5.patch.txt [ 12495350 ]
          Yin Huai made changes -
          Status Open [ 1 ] Patch Available [ 10002 ]
          Release Note This optimizer exploits the intra-query correlations and merge multiple correlated MapReduce jobs into one jobs. The patch is generated based on hive-trunk with revision 1171917. This optimizer exploits the intra-query correlations and merge multiple correlated MapReduce jobs into one jobs.
          Yin Huai made changes -
          Attachment HIVE-2206.5-1.patch.txt [ 12504921 ]
          Yin Huai made changes -
          Status Patch Available [ 10002 ] In Progress [ 3 ]
          Yin Huai made changes -
          Attachment HIVE-2206.6.patch.txt [ 12506069 ]
          Yin Huai made changes -
          Status In Progress [ 3 ] Patch Available [ 10002 ]
          Yin Huai made changes -
          Attachment HIVE-2206.7.patch.txt [ 12506144 ]
          Attachment testQueries.1.q [ 12506145 ]
          Yin Huai made changes -
          Attachment HIVE-2206.8.r1224646.patch.txt [ 12508869 ]
          Yin Huai made changes -
          Attachment Queries [ 12481809 ]
          Yin Huai made changes -
          Attachment testQueries.q [ 12494951 ]
          Yin Huai made changes -
          Attachment testQueries.1.q [ 12506145 ]
          Yin Huai made changes -
          Attachment testQueries.2.q [ 12508870 ]
          Yin Huai made changes -
          Attachment testQueries.2.q [ 12508870 ]
          Yin Huai made changes -
          Attachment testQueries.2.q [ 12508871 ]
          Yin Huai made changes -
          Attachment HIVE-2206.8-r1237253.patch.txt [ 12512363 ]
          Yin Huai made changes -
          Attachment HIVE-2206.10-r1384442.patch.txt [ 12545223 ]
          Yin Huai made changes -
          Attachment HIVE-2206.11-r1385084.patch.txt [ 12545294 ]
          Yin Huai made changes -
          Status Patch Available [ 10002 ] In Progress [ 3 ]
          Yin Huai made changes -
          Status In Progress [ 3 ] Patch Available [ 10002 ]
          Carl Steinbach made changes -
          Status Patch Available [ 10002 ] Open [ 1 ]
          Yin Huai made changes -
          Attachment HIVE-2206.12-r1386996.patch.txt [ 12545582 ]
          Yin Huai made changes -
          Attachment HIVE-2206.12-r1386996.patch.txt [ 12545582 ]
          Yin Huai made changes -
          Attachment HIVE-2206.12-r1386996.patch.txt [ 12545586 ]
          Yin Huai made changes -
          Link This issue is related to HIVE-1772 [ HIVE-1772 ]
          Yin Huai made changes -
          Link This issue is related to HIVE-3430 [ HIVE-3430 ]
          Yin Huai made changes -
          Component/s Query Processor [ 12312586 ]
          Yin Huai made changes -
          Affects Version/s 0.10.0 [ 12320745 ]
          Yin Huai made changes -
          Attachment HIVE-2206.13-r1389072.patch.txt [ 12546320 ]
          Yin Huai made changes -
          Status Open [ 1 ] Patch Available [ 10002 ]
          Carl Steinbach made changes -
          Status Patch Available [ 10002 ] Open [ 1 ]
          Yin Huai made changes -
          Status Open [ 1 ] Patch Available [ 10002 ]
          Yin Huai made changes -
          Attachment HIVE-2206.14-r1389704.patch.txt [ 12546709 ]
          He Yongqiang made changes -
          Status Patch Available [ 10002 ] Resolved [ 5 ]
          Resolution Fixed [ 1 ]
          Carl Steinbach made changes -
          Resolution Fixed [ 1 ]
          Status Resolved [ 5 ] Reopened [ 4 ]
          Yin Huai made changes -
          Attachment HIVE-2206.15-r1392491.patch.txt [ 12547394 ]
          Yin Huai made changes -
          Status Reopened [ 4 ] Patch Available [ 10002 ]
          Yin Huai made changes -
          Attachment HIVE-2206.16-r1399936.patch.txt [ 12549995 ]
          Yin Huai made changes -
          Yin Huai made changes -
          Description References:
          Paper and presentation of YSmart.
          Paper: http://www.cse.ohio-state.edu/hpcs/WWW/HTML/publications/papers/TR-11-7.pdf
          Presentation: http://sdrv.ms/UpwJJc
          This issue proposes a new optimizer called Correlation Optimizer, which is used to merge correlated operations into a single MapReduce job. In current implementation, correlation optimizer will only try to merge join and aggregation operators. Will add more later...

          The idea is based on YSmart, an SQL-to-MapReduce translator (http://ysmart.cse.ohio-state.edu/). The paper and slides are also linked below.

          References:
          Paper and presentation of YSmart.
          Paper: http://www.cse.ohio-state.edu/hpcs/WWW/HTML/publications/papers/TR-11-7.pdf
          Slides: http://sdrv.ms/UpwJJc
          Yin Huai made changes -
          Description This issue proposes a new optimizer called Correlation Optimizer, which is used to merge correlated operations into a single MapReduce job. In current implementation, correlation optimizer will only try to merge join and aggregation operators. Will add more later...

          The idea is based on YSmart, an SQL-to-MapReduce translator (http://ysmart.cse.ohio-state.edu/). The paper and slides are also linked below.

          References:
          Paper and presentation of YSmart.
          Paper: http://www.cse.ohio-state.edu/hpcs/WWW/HTML/publications/papers/TR-11-7.pdf
          Slides: http://sdrv.ms/UpwJJc
          This issue proposes a new logical optimizer called Correlation Optimizer, which is used to merge correlated MapReduce jobs (MR jobs) into a single MR job. The idea is based on YSmart (http://ysmart.cse.ohio-state.edu/).The paper and slides of YSmart are linked at the bottom.

          Since Hive translates queries in a sentence by sentence fashion, for every operation which may need to shuffle the data (e.g. join and aggregation operations), Hive will generate a MapReduce job for that operation. However, for those operations which may need to shuffle the data, they may involve correlations explained below and thus can be executed in a single MR job.
          # Input Correlation: Multiple MR jobs have input correlation (IC) if their input relation sets are not disjoint;
          # Transit Correlation: Multiple MR jobs have transit correlation (TC) if they have not only input correlation, but also the same partition key;
          # Job Flow Correlation: An MR has job flow correlation (JFC) with one of its child nodes if it has the same partition key as that child node.

          The current implementation of correlation optimizer only detect correlations among MR jobs for reduce-side join operators and reduce-side aggregation operators (not map only aggregation). A query will be optimized if it satisfies following conditions.
          # There exists a MR job for reduce-side join operator or reduce side aggregation operator which have JFC with all of its parents MR jobs (TCs will be also exploited if JFC exists);
          # All input tables of those correlated MR job are original input tables (not intermediate tables generated by sub-queries); and
          # No self join is involved in those correlated MR jobs.

          Correlation optimizer is implemented as a logical optimizer. The main reasons are that it only needs to manipulate the query plan tree and it can leverage the existing component on generating MR jobs.

          Current implementation can serve as a framework for correlation related optimizations. I think that it is better than adding individual optimizers.

          There are several work that can be done in future to improve this optimizer. Here are three examples.
          # Support queries only involve TC;
          # Support queries in which input tables of correlated MR jobs involves intermediate tables; and
          # Optimize queries involving self join.

          References:
          Paper and presentation of YSmart.
          Paper: http://www.cse.ohio-state.edu/hpcs/WWW/HTML/publications/papers/TR-11-7.pdf
          Slides: http://sdrv.ms/UpwJJc
          Yin Huai made changes -
          Attachment HIVE-2206.17-r1404933.patch.txt [ 12551963 ]
          Yin Huai made changes -
          Link This issue is required by HIVE-3667 [ HIVE-3667 ]
          Yin Huai made changes -
          Link This issue blocks HIVE-3668 [ HIVE-3668 ]
          Yin Huai made changes -
          Link This issue blocks HIVE-3669 [ HIVE-3669 ]
          Yin Huai made changes -
          Link This issue blocks HIVE-3670 [ HIVE-3670 ]
          Yin Huai made changes -
          Link This issue blocks HIVE-3671 [ HIVE-3671 ]
          Yin Huai made changes -
          Attachment HIVE-2206.18-r1407720.patch.txt [ 12553207 ]
          Yin Huai made changes -
          Attachment HIVE-2206.19-r1410581.patch.txt [ 12554227 ]
          Yin Huai made changes -
          Link This issue relates to HIVE-3773 [ HIVE-3773 ]
          Yin Huai made changes -
          Status Patch Available [ 10002 ] In Progress [ 3 ]
          Yin Huai made changes -
          Attachment HIVE-2206.20-r1434012.patch.txt [ 12565159 ]
          Yin Huai made changes -
          Status In Progress [ 3 ] Patch Available [ 10002 ]
          Yin Huai made changes -
          Link This issue relates HIVE-2340 [ HIVE-2340 ]
          Gavin made changes -
          Link This issue relates to HIVE-2340 [ HIVE-2340 ]
          Gavin made changes -
          Link This issue relates to HIVE-2340 [ HIVE-2340 ]
          Yin Huai made changes -
          Link This issue is blocked by HIVE-4572 [ HIVE-4572 ]
          Yin Huai made changes -
          Description This issue proposes a new logical optimizer called Correlation Optimizer, which is used to merge correlated MapReduce jobs (MR jobs) into a single MR job. The idea is based on YSmart (http://ysmart.cse.ohio-state.edu/).The paper and slides of YSmart are linked at the bottom.

          Since Hive translates queries in a sentence by sentence fashion, for every operation which may need to shuffle the data (e.g. join and aggregation operations), Hive will generate a MapReduce job for that operation. However, for those operations which may need to shuffle the data, they may involve correlations explained below and thus can be executed in a single MR job.
          # Input Correlation: Multiple MR jobs have input correlation (IC) if their input relation sets are not disjoint;
          # Transit Correlation: Multiple MR jobs have transit correlation (TC) if they have not only input correlation, but also the same partition key;
          # Job Flow Correlation: An MR has job flow correlation (JFC) with one of its child nodes if it has the same partition key as that child node.

          The current implementation of correlation optimizer only detect correlations among MR jobs for reduce-side join operators and reduce-side aggregation operators (not map only aggregation). A query will be optimized if it satisfies following conditions.
          # There exists a MR job for reduce-side join operator or reduce side aggregation operator which have JFC with all of its parents MR jobs (TCs will be also exploited if JFC exists);
          # All input tables of those correlated MR job are original input tables (not intermediate tables generated by sub-queries); and
          # No self join is involved in those correlated MR jobs.

          Correlation optimizer is implemented as a logical optimizer. The main reasons are that it only needs to manipulate the query plan tree and it can leverage the existing component on generating MR jobs.

          Current implementation can serve as a framework for correlation related optimizations. I think that it is better than adding individual optimizers.

          There are several work that can be done in future to improve this optimizer. Here are three examples.
          # Support queries only involve TC;
          # Support queries in which input tables of correlated MR jobs involves intermediate tables; and
          # Optimize queries involving self join.

          References:
          Paper and presentation of YSmart.
          Paper: http://www.cse.ohio-state.edu/hpcs/WWW/HTML/publications/papers/TR-11-7.pdf
          Slides: http://sdrv.ms/UpwJJc
          This issue proposes a new logical optimizer called Correlation Optimizer, which is used to merge correlated MapReduce jobs (MR jobs) into a single MR job. The idea is based on YSmart (http://ysmart.cse.ohio-state.edu/). The paper and slides of YSmart are linked at the bottom.

          Since Hive translates queries in a sentence by sentence fashion, for every operation which may need to shuffle the data (e.g. join and aggregation operations), Hive will generate a MapReduce job for that operation. However, for those operations which may need to shuffle the data, they may involve correlations explained below and thus can be executed in a single MR job.
          # Input Correlation: Multiple MR jobs have input correlation (IC) if their input relation sets are not disjoint;
          # Transit Correlation: Multiple MR jobs have transit correlation (TC) if they have not only input correlation, but also the same partition key;
          # Job Flow Correlation: An MR has job flow correlation (JFC) with one of its child nodes if it has the same partition key as that child node.

          The current implementation of correlation optimizer only detect correlations among MR jobs for reduce-side join operators and reduce-side aggregation operators (not map only aggregation). A query will be optimized if it satisfies following conditions.
          # There exists a MR job for reduce-side join operator or reduce side aggregation operator which have JFC with all of its parents MR jobs (TCs will be also exploited if JFC exists);
          # All input tables of those correlated MR job are original input tables (not intermediate tables generated by sub-queries); and
          # No self join is involved in those correlated MR jobs.

          Correlation optimizer is implemented as a logical optimizer. The main reasons are that it only needs to manipulate the query plan tree and it can leverage the existing component on generating MR jobs.

          Current implementation can serve as a framework for correlation related optimizations. I think that it is better than adding individual optimizers.

          There are several work that can be done in future to improve this optimizer. Here are three examples.
          # Support queries only involve TC;
          # Support queries in which input tables of correlated MR jobs involves intermediate tables; and
          # Optimize queries involving self join.

          References:
          Paper and presentation of YSmart.
          Paper: http://www.cse.ohio-state.edu/hpcs/WWW/HTML/publications/papers/TR-11-7.pdf
          Slides: http://sdrv.ms/UpwJJc
          Yin Huai made changes -
          Status Patch Available [ 10002 ] In Progress [ 3 ]
          Affects Version/s 0.12.0 [ 12324312 ]
          Affects Version/s 0.10.0 [ 12320745 ]
          Phabricator made changes -
          Attachment HIVE-2206.D11097.1.patch [ 12586245 ]
          Yin Huai made changes -
          Attachment HIVE-2206.21.patch.txt [ 12586250 ]
          Yin Huai made changes -
          Attachment HIVE-2206.21.patch.txt [ 12586250 ]
          Phabricator made changes -
          Attachment HIVE-2206.D11097.2.patch [ 12586552 ]
          Phabricator made changes -
          Attachment HIVE-2206.D11097.3.patch [ 12586650 ]
          Yin Huai made changes -
          Status In Progress [ 3 ] Patch Available [ 10002 ]
          Phabricator made changes -
          Attachment HIVE-2206.D11097.4.patch [ 12586745 ]
          Phabricator made changes -
          Attachment HIVE-2206.D11097.5.patch [ 12586752 ]
          Phabricator made changes -
          Attachment HIVE-2206.D11097.6.patch [ 12587486 ]
          Phabricator made changes -
          Attachment HIVE-2206.D11097.7.patch [ 12587529 ]
          Phabricator made changes -
          Attachment HIVE-2206.D11097.8.patch [ 12588006 ]
          Phabricator made changes -
          Attachment HIVE-2206.D11097.9.patch [ 12588453 ]
          Phabricator made changes -
          Attachment HIVE-2206.D11097.10.patch [ 12589192 ]
          Phabricator made changes -
          Attachment HIVE-2206.D11097.11.patch [ 12589836 ]
          Phabricator made changes -
          Attachment HIVE-2206.D11097.12.patch [ 12589838 ]
          Phabricator made changes -
          Attachment HIVE-2206.D11097.13.patch [ 12590123 ]
          Phabricator made changes -
          Attachment HIVE-2206.D11097.14.patch [ 12590312 ]
          Phabricator made changes -
          Attachment HIVE-2206.D11097.15.patch [ 12590482 ]
          Phabricator made changes -
          Attachment HIVE-2206.D11097.16.patch [ 12591312 ]
          Yin Huai made changes -
          Link This issue is related to HIVE-4827 [ HIVE-4827 ]
          Phabricator made changes -
          Attachment HIVE-2206.D11097.17.patch [ 12592065 ]
          Phabricator made changes -
          Attachment HIVE-2206.D11097.18.patch [ 12592218 ]
          Yin Huai made changes -
          Status Patch Available [ 10002 ] In Progress [ 3 ]
          Phabricator made changes -
          Attachment HIVE-2206.D11097.19.patch [ 12592872 ]
          Yin Huai made changes -
          Status In Progress [ 3 ] Patch Available [ 10002 ]
          Yin Huai made changes -
          Attachment HIVE-2206.patch [ 12592900 ]
          Ashutosh Chauhan made changes -
          Status Patch Available [ 10002 ] Resolved [ 5 ]
          Fix Version/s 0.12.0 [ 12324312 ]
          Resolution Fixed [ 1 ]
          Phabricator made changes -
          Attachment HIVE-2206.D11097.20.patch [ 12593217 ]
          Phabricator made changes -
          Attachment HIVE-2206.D11097.21.patch [ 12600217 ]
          Phabricator made changes -
          Attachment HIVE-2206.D11097.22.patch [ 12600220 ]
          Ashutosh Chauhan made changes -
          Status Resolved [ 5 ] Closed [ 6 ]
          Lefty Leverenz made changes -
          Link This issue is related to HIVE-7362 [ HIVE-7362 ]
          Lefty Leverenz made changes -
          Labels TODOC12
          Lefty Leverenz made changes -
          Labels TODOC12

            People

            • Assignee:
              Yin Huai
              Reporter:
              He Yongqiang
            • Votes:
              0 Vote for this issue
              Watchers:
              40 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Development