Slight change.  Since the auto refresh functionality is what most people
expect, we're going to make that the default when creating a scanner and
provide a flag for disabling it.  The new flags are:

    enum {
      OPEN_FLAG_BYPASS_TABLE_CACHE           = 0x01,
      OPEN_FLAG_REFRESH_TABLE_CACHE          = 0x02,
      OPEN_FLAG_NO_AUTO_TABLE_REFRESH        = 0x04
    };

- Doug

On Tue, Apr 26, 2011 at 12:24 PM, Doug Judd <[email protected]> wrote:

> There is a Thrift and C++ API change that we're planning to include in the
> upcoming 0.9.5.0 "pre4" release which I describe below.  Please respond if
> you feel that this change will be problematic.
>
> Currently the C++ Client object includes a Table cache which maps table
> name to a smart pointer to a table object.  An entry gets created when a
> table is first opened and subsequent Namespace::open_table() calls will
> returned the cached pointer to the previously created table object.  The
> reason for this cache is that creating the Table object is fairly expensive.
>
> There are a couple of problems with this caching related to the
> ThriftBroker.  The first problem has to do with ALTER TABLE.  If a table is
> opened via the ThriftBroker and then altered through the hypertable shell,
> subsequent table access (scanner or mutator) will fail with a
> SCHEMA_GENERATION_MISMATCH error because the ThriftBroker's hypertable
> client will use the stale cached Table that was created with the previous
> schema generation.  The second problem occurs when a table is opened via the
> ThriftBroker and then it is dropped and re-created via the hypertable shell
> (e.g. to clear the table contents).  Subsequent access to the table will
> fail with TABLE_NOT_FOUND because when a table gets re-created, it gets
> assigned a new table ID and the ThriftBroker's hypertable client will use
> the stale cached Table that was created with the old table ID.  The current
> code attempts to solve this problem with the following approaches:
>
> 1. 'Hypertable.Client.RefreshSchema' property.  This property tells the
> Hypertable client to refresh the table cache when it encounters certain
> errors (default is "true").
> 2. 'retry_table_not_found' parameter of the open_scanner API.
> 3. 'force' flag of the Namespace::open_table() API
>
> This approach does not cover all cases and is somewhat awkward.  We propose
> the following solution to clean up the API and make the system more
> user-friendly:
>
> 1. Remove the Hypertable.Client.RefreshSchema property and
> the retry_table_not_found parameter to open_scanner API
> 2. Replace the 'force' flag of Namespace::open_table() with a 'flags'
> parameter that is the bitwise OR of the following (defined in Table.h):
>
> enum {
>     OPEN_FLAG_BYPASS_TABLE_CACHE           = 0x01,
>     OPEN_FLAG_REFRESH_TABLE_CACHE          = 0x02,
>     OPEN_FLAG_REFRESH_SCHEMA_TRANSPARENTLY = 0x04
> };
>
> By default, both the ThriftBroker and the hypertable shell will open tables
> with the OPEN_FLAG_REFRESH_SCHEMA_TRANSPARENTLY flag.  This will cause the
> cached Tables to get refreshed automatically (and transparently) when the
> client encounters SCHEMA_GENERATION_MISMATCH or TABLE_NOT_FOUND errors.  It
> has been our experience that this behavior is what most people expect.  If
> this change will be problematic for you, please let us know (soon) and we
> can try to come up with a solution to accomodate.
>
> - Doug
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Hypertable Development" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/hypertable-dev?hl=en.

Reply via email to