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

Andrey Stepachev commented on HBASE-13087:
------------------------------------------

[~eclark] I understand your concern for meta. but keep in mind, that meta is 
only special table which is handled separately. During first implementation (in 
table descriptors) I thought about introducing special table for tables or 
state or whatever, but I dropped that idea. It complicates table state 
management, because we need to keep two tables online to do most operations, so 
we can't start recovering until we are onlined meta _and_ our new table. That 
will definitely introduce more methods named like assignMeta which is 
definitely bad.
With introduction of meta replicas we can go further and prohibit requests to 
primary replica and always try secondary for state requests first.
But in general I agree that may be this change is too early for branch-1. 

[~stack] As for steps for fixing that, here are two problems at once:
1. we need(?) to be compatible with 0.98 clients, which use zk for table 
states. That can be solved by optionally duplicating states in readonly mode to 
zk (actually nobody doing writes there, so basically it will not hurt clients, 
they just can be a bit lagged)
2. we faced with no sharing of knowledge of compatibility between master and 
regions. We can solve that in two ways:
  - hackery way, adding 'mark' coprocessor to ServerLoad report, say 
'compatCoprocessor:haveMeta,disabledZk,whateverWeHave' and find out which 
region servers will be capable to handle new meta (i.e thay were upgraded)
  - send/request additional information once on registration or later by 
additional RPC which allows to query (that definitely need to be with new jira):
     a) any config values if needed (say ask do regions server thinks zk 
assigment enabled?)
     b) list of compatibilities in strict enum-like list (meta, branch-1, 
release, amInZk...) and master can make conscious decisions on what is going on.

just my 5 cents.


> branch-1 isn't rolling upgradable from 0.98
> -------------------------------------------
>
>                 Key: HBASE-13087
>                 URL: https://issues.apache.org/jira/browse/HBASE-13087
>             Project: HBase
>          Issue Type: Bug
>    Affects Versions: 1.1.0
>            Reporter: Elliott Clark
>            Assignee: Rajesh Nishtala
>            Priority: Blocker
>             Fix For: 1.1.0
>
>         Attachments: HBASE-13087-v1.txt
>
>
> {code}org.apache.hadoop.hbase.client.RetriesExhaustedWithDetailsException: 
> Failed 1 action: 
> org.apache.hadoop.hbase.regionserver.NoSuchColumnFamilyException: Column 
> family table does not exist in region hbase:meta,,1.1588230740 in table 
> 'hbase:meta', {TABLE_ATTRIBUTES => {IS_META => 'true', coprocessor$1 => 
> '|org.apache.hadoop.hbase.coprocessor.MultiRowMutationEndpoint|536870911|'}, 
> {NAME => 'info', BLOOMFILTER => 'NONE', VERSIONS => '10', IN_MEMORY => 
> 'true', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 
> 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', 
> BLOCKSIZE => '8192', REPLICATION_SCOPE => '0'}
>       at 
> org.apache.hadoop.hbase.regionserver.HRegionServer.doBatchOp(HRegionServer.java:4513)
>       at 
> org.apache.hadoop.hbase.regionserver.HRegionServer.doNonAtomicRegionMutation(HRegionServer.java:3687)
>       at 
> org.apache.hadoop.hbase.regionserver.HRegionServer.multi(HRegionServer.java:3576)
>       at 
> org.apache.hadoop.hbase.protobuf.generated.ClientProtos$ClientService$2.callBlockingMethod(ClientProtos.java:30816)
>       at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:2029)
>       at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:107)
>       at 
> org.apache.hadoop.hbase.ipc.RpcExecutor.consumerLoop(RpcExecutor.java:130)
>       at org.apache.hadoop.hbase.ipc.RpcExecutor$1.run(RpcExecutor.java:107)
>       at java.lang.Thread.run(Thread.java:745)
> : 1 time, 
>       at 
> org.apache.hadoop.hbase.client.AsyncProcess$BatchErrors.makeException(AsyncProcess.java:228)
>       at 
> org.apache.hadoop.hbase.client.AsyncProcess$BatchErrors.access$1700(AsyncProcess.java:208)
>       at 
> org.apache.hadoop.hbase.client.AsyncProcess.waitForAllPreviousOpsAndReset(AsyncProcess.java:1689)
>       at 
> org.apache.hadoop.hbase.client.BufferedMutatorImpl.backgroundFlushCommits(BufferedMutatorImpl.java:208)
>       at 
> org.apache.hadoop.hbase.client.BufferedMutatorImpl.flush(BufferedMutatorImpl.java:183)
>       at org.apache.hadoop.hbase.client.HTable.flushCommits(HTable.java:1404)
>       at org.apache.hadoop.hbase.client.HTable.put(HTable.java:1017)
>       at 
> org.apache.hadoop.hbase.MetaTableAccessor.put(MetaTableAccessor.java:1123)
>       at 
> org.apache.hadoop.hbase.MetaTableAccessor.putToMetaTable(MetaTableAccessor.java:1113)
>       at 
> org.apache.hadoop.hbase.MetaTableAccessor.updateTableState(MetaTableAccessor.java:1436)
>       at 
> org.apache.hadoop.hbase.MetaTableAccessor.updateTableState(MetaTableAccessor.java:948)
>       at 
> org.apache.hadoop.hbase.master.TableStateManager.writeMetaState(TableStateManager.java:195)
>       at 
> org.apache.hadoop.hbase.master.TableStateManager.setTableState(TableStateManager.java:69)
>       at 
> org.apache.hadoop.hbase.master.AssignmentManager.setEnabledTable(AssignmentManager.java:3427)
>       at org.apache.hadoop.hbase.master.HMaster.assignMeta(HMaster.java:903)
>       at 
> org.apache.hadoop.hbase.master.HMaster.finishActiveMasterInitialization(HMaster.java:698)
>       at org.apache.hadoop.hbase.master.HMaster.access$500(HMaster.java:166)
>       at org.apache.hadoop.hbase.master.HMaster$1.run(HMaster.java:1494)
>       at java.lang.Thread.run(Thread.java:745)
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to