Andrey, I will take care of (1).

And (2) :-) if your guys agree.  Because it is not consistent, if the bulk
assigned failed, we would fail the enabling table; however, if the bulk
assign not starts, we would enable table with offline regions - really
inconsistent - we either all fail in those scenarios or all succeed with
offline region (best effort approach).

Thanks
Stephen

On Mon, Mar 16, 2015 at 11:01 AM, Andrey Stepachev <oct...@gmail.com> wrote:

> Stephen, would you like to create jira for case (1)?
>
> Thank you.
>
> On Mon, Mar 16, 2015 at 5:58 PM, Andrey Stepachev <oct...@gmail.com>
> wrote:
>
> > Thanks Stephen.
> >
> > Looks like you are right. For (1) case we really don't need there
> > state cleanup. That is a bug. Should throw TableNotFoundException.
> >
> > As for (2) in case of no online region servers available we could
> > leave table enabled, but no regions would be assigned.
> >
> > Actually that rises good question what enable table means,
> > i.e. do we really need to guarantee that on table enable absolutely
> > all regions are online, or that could be done in Admin on client side.
> >
> > So for now it seems that Enable handler do what is best, and leave
> > table enabled but unassigned to be later assigned by Balancer.
> >
> > On Mon, Mar 16, 2015 at 5:34 PM, Stephen Jiang <syuanjiang...@gmail.com>
> > wrote:
> >
> >> I want to make sure that the following logic in EnableTableHandler is
> >> correct:
> >>
> >> (1). In EnableTableHandler#prepare - if the table is not existed, it
> >> marked
> >> the table as deleted and not throw exception.  The result is the table
> >> lock
> >> is released and the caller has no knowledge that the table not exist or
> >> already deleted, it would continue the next step.
> >>
> >> Currently, this would happen during recovery (the caller is
> >> AssignmentManager#recoverTableInEnablingState()) - however, looking at
> >> recovery code, it expects TableNotFoundException  Should we always throw
> >> exception - if the table not exist?  I want to make sure that I don't
> >> break
> >> recovery logic by modifying.
> >>
> >> public EnableTableHandler prepare() {
> >>
> >> ...
> >>
> >> // Check if table exists
> >>
> >>       if (!MetaTableAccessor.tableExists(this.server.getConnection(),
> >> tableName)) {
> >>
> >>         // retainAssignment is true only during recovery.  In normal
> case
> >> it is false
> >>
> >>         if (!this.skipTableStateCheck) {
> >>
> >>           throw new TableNotFoundException(tableName);
> >>
> >>         }
> >>
> >>         this.assignmentManager.getTableStateManager().setDeletedTable(
> >> tableName);
> >>
> >>       }
> >>
> >> ...
> >>
> >> }
> >> (2). In EnableTableHandler#handleEnableTable() - if the bulk assign plan
> >> could not be find, it would leave regions to be offline and declare
> enable
> >> table succeed - i think this is a bug and we should retry or fail - but
> I
> >> want to make sure that there are some merit behind this logic
> >>
> >>   private void handleEnableTable() {
> >>
> >>     Map<ServerName, List<HRegionInfo>> bulkPlan =
> >>
> >>         this.assignmentManager.getBalancer().retainAssignment(
> >> regionsToAssign, onlineServers);
> >>
> >>     if (bulkPlan != null) {
> >>
> >>           ...
> >>
> >>       } else {
> >>
> >>       LOG.info("Balancer was unable to find suitable servers for table
> " +
> >> tableName
> >>
> >>           + ", leaving unassigned");
> >>
> >>       done = true;
> >>
> >>     }
> >>
> >>     if (done) {
> >>
> >>       // Flip the table to enabled.
> >>
> >>       this.assignmentManager.getTableStateManager().setTableState(
> >>
> >>         this.tableName, TableState.State.ENABLED);
> >>
> >>       LOG.info("Table '" + this.tableName
> >>
> >>       + "' was successfully enabled. Status: done=" + done);
> >>
> >>    }
> >>
> >>      ...
> >>
> >> }
> >>
> >>
> >> thanks
> >> Stephen
> >>
> >
> >
> >
> > --
> > Andrey.
> >
>
>
>
> --
> Andrey.
>

Reply via email to