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

Ted Yu commented on HBASE-19423:
--------------------------------

Thanks for reporting.

Do you want to attach a patch ?

> 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
>
>
> 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