Hi all,
  I've been reading the code of secondary index recently and i found it very 
hard to understand. Here are some questions:
  1. there are 5 classes defined in package 
'org.apache.phoenix.hbase.index.covered.example', but it seems that these 
classes are only referenced in tests.
      If that's true, then why not putting them into IT/test directory?
      If not, then what are they used for? 


  2. class IndexMemStore. 
      I read the comment at the header of this class many times but I still 
cannot get the point. What is the 'out-of-order' scenario? 
      I read the comment of CoveredColumnIndexer too, it might have showed me 
an 'example' of this scenario.  The comments:


 Taking the simple case, assume we do a single column in a group. Then if we 
get an out of order
 update, we need to check the current state of that column in the current row. 
If the current row
 is older, we can issue a delete as normal. If the current row is newer, 
however, we then have to
 issue a delete for the index update at the time of the current row. This 
ensures that the index
 update made for the 'future' time still covers the existing row.


      So, If I delete an existing row of the data table with ts = 10, while the 
existing row has a ts of 20 which is 'newer' than the current operation, then, 
we call the current Delete operation is 'back-in-time' or 'out-of-order'? What 
makes me confused is the solution of this scenario: just issue the delete with 
the ts of the existing row, which means issuing a Delete with ts = 20 ? Am i 
right? 
     In my opinion, if a Delete is back in time, we can just ignore it or issue 
an index Delete simply with the same ts.  Why are we using such a complex way 
to generating the index update?  
     The 'roll back' operation in NonTxIndexBuilder, and 
IndexUpdateManager#fixUpCurrentUpdates(), I cannot see the purpose of these 
facilities. I think I must have missed  something very important, which might 
be some core concept or design. May someone provide me an easier way to 
understand these code?


Thanks.
William

Reply via email to