[ https://issues.apache.org/jira/browse/OMID-240?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17791269#comment-17791269 ]
Rajeshbabu Chintaguntla commented on OMID-240: ---------------------------------------------- bq.Can you confirm that the failing tests have omid.server.side.filter enabled ? While creating transactional table object in the phoenix we are enabling serverSideFilter by default even though in omid it's false by default so we can control it through the configuration. {noformat} public OmidTransactionTable(PhoenixTransactionContext ctx, Table hTable, boolean isConflictFree, boolean addShadowCells) throws SQLException { ... tTable = new TTable(hTable, true, isConflictFree); .... this.tx = omidTransactionContext.getTransaction(); } {noformat} bq.At the very least, we should print some strongly worded error messages in the coprocessor startup code when an invalid combination is set. To identify the combination is invalid during coprocessor startup we need to do any of the following 3 steps looks like good amount of work might be required to these changes will take up as a new JIRA. 1. We need pass the TSO server configurations to each region server which will operational burden as the cluster managers need to change the configurations and restart if anything required that's by currently by default creating the HBase commit table client and trying to check the commit timestamp from the client. 2. We need fetch the information from TSO server which might need to add RPC call and implementation of it to check which commit table information has configured at server based on the server filter configuration. 3. While starting the TSO server needs to verify the combinations properly seems like cannot conclude the right set properly without looking proper HBase configurations like server side filters etc.. bq.We should also print an error message if HA is configured, but any InMemory Module is used. Yes we can do that. bq.We should document these (for that, we would need fix the Omid web page), at the very least as a release note. We can add the release notes and update the documentation what configurations needs to be used in which scenario. bq.Ideally, we would run all tests with both InMemory modules and server-side filter off, and HBase modules and server-server-side filtering is enabled (not in this ticket's scope) Will raise a JIRA for this and work on it later. bq.Have you looked at the performance implications ? Even with server side filtering commit timestamps are getting cached mostly only one call to HBase commit table may happen. bq.How do hbase + server side filtering and in-memory and no server-side filtering compare ? Trying to collect some basic details regarding this. Will get back to you. bq.I would imagine that server-side filtering mostly makes a difference for hot rows, like application level locks and counters, and for slowly changing keys it doesn't do that much. Yes better not to use server-side filtering if the changes happen rarely. bq.Actually, I think we could just refuse to start TSO server for that invalid combination of in-memory modules and HA. Will check and work as part of another JIRA. bq.All in all, changing the default looks like the safe choice, but we should document this issue thoroughly. Yes I have made a patch just doing some testing will upload the patch tomorrow. > Transactional visibility is broken > ---------------------------------- > > Key: OMID-240 > URL: https://issues.apache.org/jira/browse/OMID-240 > Project: Phoenix Omid > Issue Type: Bug > Affects Versions: 1.1.0 > Reporter: Lars Hofhansl > Assignee: Rajeshbabu Chintaguntla > Priority: Critical > Attachments: hbase-omid-client-config.yml, > omid-server-configuration.yml > > > Client I: > {code:java} > > create table test(x float primary key, y float) DISABLE_WAL=true, > TRANSACTIONAL=true; > No rows affected (1.872 seconds) > > !autocommit off > Autocommit status: false > > upsert into test values(rand(), rand()); > 1 row affected (0.018 seconds) > > upsert into test select rand(), rand() from test; > -- 18-20x > > !commit{code} > > Client II: > {code:java} > -- repeat quickly after the commit on client I > > select count(*) from test; > +----------+ > | COUNT(1) | > +----------+ > | 0 | > +----------+ > 1 row selected (1.408 seconds) > > select count(*) from test; > +----------+ > | COUNT(1) | > +----------+ > | 259884 | > +----------+ > 1 row selected (2.959 seconds) > > select count(*) from test; > +----------+ > | COUNT(1) | > +----------+ > | 260145 | > +----------+ > 1 row selected (4.274 seconds) > > select count(*) from test; > +----------+ > | COUNT(1) | > +----------+ > | 260148 | > +----------+ > 1 row selected (5.563 seconds) > > select count(*) from test; > +----------+ > | COUNT(1) | > +----------+ > | 260148 | > +----------+ > 1 row selected (5.573 seconds){code} > The second client should either show 0 or 260148. But no other value! -- This message was sent by Atlassian Jira (v8.20.10#820010)