[ 
https://issues.apache.org/jira/browse/HBASE-19423?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16280619#comment-16280619
 ] 

Mohammad Arshad commented on HBASE-19423:
-----------------------------------------

Thanks [~yuzhih...@gmail.com], [~anoop.hbase] for your response.
bq.  Not sure why taking that path. Can u pls explain that part?
I have a scenario where in a user table some column families are system 
generated and these families data need not to be replicated.
Because these are system generated column families it would not be appropriate 
to expect user to disable replication for these families. So filtering is done 
at system level through coprocessors.

> Replication entries are not filtered correctly when replication scope is set 
> through WAL Co-processor
> -----------------------------------------------------------------------------------------------------
>
>                 Key: HBASE-19423
>                 URL: https://issues.apache.org/jira/browse/HBASE-19423
>             Project: HBase
>          Issue Type: Bug
>            Reporter: Mohammad Arshad
>              Labels: Replication, WAL
>             Fix For: 2.0.0, 1.4.0, 1.3.2
>
>         Attachments: HBASE-19423-branch-1.3-001.patch
>
>
> Replicaion scope set in WALObserver is getting reset in 
> Replication.scopeWALEdits(). 
> Because of this problem custom implementation of WALObserver can not be used 
> as a replication filter.
> Suppose WALObserver implementation has logic to filter all entries from 
> family f2
> {code}
> // Filter all family f2 rows
>   public static class ReplicationFilterWALCoprocessor extends BaseWALObserver 
> {
>     @Override
>     public boolean preWALWrite(ObserverContext<? extends 
> WALCoprocessorEnvironment> ctx,
>         HRegionInfo info, WALKey logKey, WALEdit logEdit) throws IOException {
>       ArrayList<Cell> cells = logEdit.getCells();
>       for (Cell cell : cells) {
>         byte[] fam = CellUtil.cloneFamily(cell);
>         if ("f2".equals(Bytes.toString(fam))) {
>           NavigableMap<byte[], Integer> scopes = logKey.getScopes();
>           if (scopes == null) {
>             logKey.setScopes(new TreeMap<byte[], 
> Integer>(Bytes.BYTES_COMPARATOR));
>           }
>           logKey.getScopes().put(fam, HConstants.REPLICATION_SCOPE_LOCAL);
>         }
>       }
>       return false;
>     }
>   }
> {code}
> This logic can not work as 
> {{org.apache.hadoop.hbase.replication.regionserver.Replication.scopeWALEdits()}}
>  recreates and populates scopes.
> *SOLUTION:*
> In Replication.scopeWALEdits(), create scopes map only if WALKey does not 
> have it.
> {code}
> NavigableMap<byte[], Integer> scopes = logKey.getScopes();
>     if (scopes == null) {
>       scopes = new TreeMap<byte[], Integer>(Bytes.BYTES_COMPARATOR);
>     }
> {code}
>  



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to