hbase-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Mohammad Arshad (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (HBASE-19423) Replication entries are not filtered correctly when replication scope is set through WAL Co-processor
Date Wed, 06 Dec 2017 19:17:00 GMT

     [ https://issues.apache.org/jira/browse/HBASE-19423?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Mohammad Arshad updated HBASE-19423:
------------------------------------
    Attachment: HBASE-19423-branch-1.4-001.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: 1.4.0, 1.3.2
>
>         Attachments: HBASE-19423-branch-1.3-001.patch, HBASE-19423-branch-1.4-001.patch,
HBASE-19423-master-001-test.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)

Mime
View raw message