[jira] [Comment Edited] (PHOENIX-3811) Do not disable index on write failure by default

2017-05-10 Thread James Taylor (JIRA)

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

James Taylor edited comment on PHOENIX-3811 at 5/10/17 7:00 PM:


High level summary of changes: turns off automatic index rebuilding by default, 
leaves indexes active upon a write failure, and provides a means of users 
replaying a commit after a write failure to ensure the index is consistent with 
data table. Would you have any spare cycles to review, [~tdsilva]? 

Here's some more detail on the changes:
* Turns off the background partial index rebuild/catchup task by default for a 
table. The reason is that users will typically have some kind of retry strategy 
themselves (for example, a message queue that retries). They need this as when 
a commit exception occurs, some of the data rows may have been written while 
others will not have been (regardless of what state the index is in wrt the 
data table). What ever retry mechanism is in use, these retries will also get 
the index back in sync (see below for a new mechanism for mutable tables).
* Provides a means for the client to retry a commit at the timestamp at which 
it was originally submitted. This is important for mutable data as otherwise 
the retried commits may overwrite successful commits that occurred later. This 
is accomplished by a) including the server timestamp at which the data rows 
were (or would have been) committed in CommitException and b) Adds a new 
connection property, {{PhoenixRuntime.REPLAY_AT_ATTRIB}}, which specifies a 
timestamp at which the commit will occur and tells the system to ignore later 
data updates (to ensure your index remains in sync with your data table).
* Provides an option (the default) to keep an index active even after a write 
failure occurs. Many use cases are essentially down without the secondary index 
in place and would rather the index be behind by a few rows wrt the data table 
while the retries are occurring. This option is configurable globally with the 
{{QueryServices.INDEX_FAILURE_DISABLE_INDEX}} config property and on a table by 
table basis through the 
{{PhoenixIndexFailurePolicy.DISABLE_INDEX_ON_WRITE_FAILURE}} table descriptor 
property.
* Provides an option to turn on the partial rebuild index task on a 
table-by-table basis (false by default). This option is orthogonal now to 
whether an index remains active or is disabled. Note that if the existing 
global {{PhoenixIndexFailurePolicy.INDEX_FAILURE_HANDLING_REBUILD_ATTRIB}} 
config property is false, then the background thread won't run so the table 
property won't matter. By default, the global property is true while the 
table-by-table property is false to allow the user to turn the automatic 
rebuild on for a particular table.
* Lowers the default frequency at which we look for indexes which need to be 
partially rebuilt from every 10 seconds to once per minute.
* Fixes MutableIndexFailureIT test failures and adds more for the above new 
options.

FYI, [~lhofhansl], [~apurtell], [~mvanwely].


was (Author: jamestaylor):
High level summary of changes: turns off automatic index rebuilding by default, 
leaves indexes active upon a write failure, and provides a means of users 
replaying a commit after a write failure to ensure the index is consistent with 
data table. Would you have any spare cycles to review, [~tdsilva]? 

Here's some more detail on the changes:
- Turns off the background partial index rebuild/catchup task by default for a 
table. The reason is that users will typically have some kind of retry strategy 
themselves (for example, a message queue that retries). They need this as when 
a commit exception occurs, some of the data rows may have been written while 
others will not have been (regardless of what state the index is in wrt the 
data table). What ever retry mechanism is in use, these retries will also get 
the index back in sync (see below for a new mechanism for mutable tables).
- Provides a means for the client to retry a commit at the timestamp at which 
it was originally submitted. This is important for mutable data as otherwise 
the retried commits may overwrite successful commits that occurred later. This 
is accomplished by a) including the server timestamp at which the data rows 
were (or would have been) committed in CommitException and b) Adds a new 
connection property, {{PhoenixRuntime.REPLAY_AT_ATTRIB}}, which specifies a 
timestamp at which the commit will occur and tells the system to ignore later 
data updates (to ensure your index remains in sync with your data table).
- Provides an option (the default) to keep an index active even after a write 
failure occurs. Many use cases are essentially down without the secondary index 
in place and would rather the index be behind by a few rows wrt the data table 
while the retries are occurring. This option is configu

[jira] [Comment Edited] (PHOENIX-3811) Do not disable index on write failure by default

2017-05-10 Thread James Taylor (JIRA)

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

James Taylor edited comment on PHOENIX-3811 at 5/10/17 7:19 PM:


High level summary of changes: turns off automatic index rebuilding by default, 
leaves indexes active upon a write failure, and provides a means of users 
replaying a commit after a write failure to ensure the index is consistent with 
data table. Would you have any spare cycles to review, [~tdsilva]? 

Here's some more detail on the changes:
* Turns off the background partial index rebuild/catchup task by default for a 
table. The reason is that users will typically have some kind of retry strategy 
themselves (for example, a message queue that retries). They need this as when 
a commit exception occurs, some of the data rows may have been written while 
others will not have been (regardless of what state the index is in wrt the 
data table). What ever retry mechanism is in use, these retries will also get 
the index back in sync (see below for a new mechanism for mutable tables).
* Provides a means for the client to retry a commit at the timestamp at which 
it was originally submitted. This is important for mutable data as otherwise 
the retried commits may overwrite successful commits that occurred later. This 
is accomplished by a) including the server timestamp at which the data rows 
were (or would have been) committed in CommitException and b) Adds a new 
connection property, {{PhoenixRuntime.REPLAY_AT_ATTRIB}}, which specifies a 
timestamp at which the commit will occur and tells the system to ignore later 
data updates (to ensure your index remains in sync with your data table).
* Provides an option (the default) to keep an index active even after a write 
failure occurs. Many use cases are essentially down without the secondary index 
in place and would rather the index be behind by a few rows wrt the data table 
while the retries are occurring. This option is configurable globally with the 
{{QueryServices.INDEX_FAILURE_DISABLE_INDEX}} config property and on a table by 
table basis through the 
{{PhoenixIndexFailurePolicy.DISABLE_INDEX_ON_WRITE_FAILURE}} table descriptor 
property.
* Provides an option to turn on the partial rebuild index task on a 
table-by-table basis (false by default). This option is orthogonal now to 
whether an index remains active or is disabled (i.e. the index can remain 
active *and* be partially rebuilt/caught up in the background). Note that if 
the existing global 
{{PhoenixIndexFailurePolicy.INDEX_FAILURE_HANDLING_REBUILD_ATTRIB}} config 
property is false, then the background thread won't run so the table property 
won't matter. By default, the global property is true while the table-by-table 
property is false to allow the user to turn the automatic rebuild on for a 
particular table.
* Lowers the default frequency at which we look for indexes which need to be 
partially rebuilt from every 10 seconds to once per minute.
* Fixes MutableIndexFailureIT test failures and adds more for the above new 
options.

FYI, [~lhofhansl], [~apurtell], [~mvanwely].


was (Author: jamestaylor):
High level summary of changes: turns off automatic index rebuilding by default, 
leaves indexes active upon a write failure, and provides a means of users 
replaying a commit after a write failure to ensure the index is consistent with 
data table. Would you have any spare cycles to review, [~tdsilva]? 

Here's some more detail on the changes:
* Turns off the background partial index rebuild/catchup task by default for a 
table. The reason is that users will typically have some kind of retry strategy 
themselves (for example, a message queue that retries). They need this as when 
a commit exception occurs, some of the data rows may have been written while 
others will not have been (regardless of what state the index is in wrt the 
data table). What ever retry mechanism is in use, these retries will also get 
the index back in sync (see below for a new mechanism for mutable tables).
* Provides a means for the client to retry a commit at the timestamp at which 
it was originally submitted. This is important for mutable data as otherwise 
the retried commits may overwrite successful commits that occurred later. This 
is accomplished by a) including the server timestamp at which the data rows 
were (or would have been) committed in CommitException and b) Adds a new 
connection property, {{PhoenixRuntime.REPLAY_AT_ATTRIB}}, which specifies a 
timestamp at which the commit will occur and tells the system to ignore later 
data updates (to ensure your index remains in sync with your data table).
* Provides an option (the default) to keep an index active even after a write 
failure occurs. Many use cases are essentially down without the secondary index 
in place and would rather the index be behi

[jira] [Comment Edited] (PHOENIX-3811) Do not disable index on write failure by default

2017-05-11 Thread Matthew Van Wely (JIRA)

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

Matthew Van Wely edited comment on PHOENIX-3811 at 5/11/17 6:08 PM:


Thx [~giacomotaylor].  

> If you don't set the REPLAY_AT property and earlier batches are processed 
> before later batches, you run the risk of overwriting a row with an earlier 
> value

Regarding this, we aim to make all upserts idempotent, by reloading and writing 
the entire row, as a retry mechanism to avoid overlapping and out of order 
writes.  We'll consider if "replay_at" is still needed.  Thx.


was (Author: mvanw...@gmail.com):
Thx [~giacomotaylor].  

> If you don't set the REPLAY_AT property and earlier batches are processed 
> before later batches, you run the risk of overwriting a row with an earlier 
> value

Regarding this, we aim to make all upserts idempotents by reloading and writing 
the entire row, as a retry mechanism to avoid overlapping and out of order 
writes.  We'll consider if "replay_at" is still needed.  Thx.

> Do not disable index on write failure by default
> 
>
> Key: PHOENIX-3811
> URL: https://issues.apache.org/jira/browse/PHOENIX-3811
> Project: Phoenix
>  Issue Type: Bug
>Reporter: James Taylor
>Assignee: James Taylor
> Fix For: 4.11.0
>
> Attachments: PHOENIX-3811_v1.patch, PHOENIX-3811_v2.patch, 
> PHOENIX-3811_v3.patch, PHOENIX-3811-wip1.patch, PHOENIX-3811-wip2.patch, 
> PHOENIX-3811-wip3.patch, PHOENIX-3811-wip4.patch, PHOENIX-3811-wip5.patch, 
> PHOENIX-3811-wip7.patch
>
>
> We should provide a way to configure the system so that the server takes no 
> specific action when an index write fails. Since we always throw the write 
> failure back to the client, the client can often deal with failures more 
> easily than the server since they have the batch of mutations in memory. 
> Often times, allowing access to an index that may be one batch behind the 
> data table is better than disabling it given the negative performance that 
> will occur while the index cannot be written to.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)