[
https://issues.apache.org/jira/browse/PHOENIX-1676?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14340857#comment-14340857
]
Thomas D'Silva edited comment on PHOENIX-1676 at 2/27/15 9:37 PM:
------------------------------------------------------------------
I also tried creating a simple htable, but IndexQosRpcController.setPriority is
not getting called for this table.
{code}
@Test
public void testTableWriteWithQos() throws Exception {
final TableName tableName = TableName.valueOf("TEST");
Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
Connection conn = driver.connect(url, props);
PhoenixConnection phoenixConn = conn.unwrap(PhoenixConnection.class);
HBaseAdmin admin = phoenixConn.getQueryServices().getAdmin();
byte[][] SPLITS = new byte[][] {Bytes.toBytes(20), Bytes.toBytes(30)};
try {
// Create table then get the single region for our new table.
HTableDescriptor descriptor = new HTableDescriptor(tableName);
HColumnDescriptor columnDescriptor = new
HColumnDescriptor(Bytes.toBytes("cf"));
descriptor.addFamily(columnDescriptor);
admin.createTable(descriptor, SPLITS);
HTableInterface t =
phoenixConn.getQueryServices().getTable(Bytes.toBytes("TEST"));
byte[] k1 = Bytes.toBytes(15);
Put p = new Put(k1);
p.add(Bytes.toBytes("cf"), Bytes.toBytes("q1"),
Bytes.toBytes("value1"));
t.put(p);
byte[] k2 = Bytes.toBytes(25);
p = new Put(k2);
p.add(Bytes.toBytes("cf"), Bytes.toBytes("q2"),
Bytes.toBytes("value2"));
t.put(p);
byte[] k3 = Bytes.toBytes(35);
p = new Put(k3);
p.add(Bytes.toBytes("cf"), Bytes.toBytes("q3"),
Bytes.toBytes("value3"));
t.put(p);
t.flushCommits();
admin.flush(tableName.getName());
Result r = t.get(new Get(k1));
assertFalse(r.isEmpty());
r = t.get(new Get(k2));
assertFalse(r.isEmpty());
r = t.get(new Get(k3));
assertFalse(r.isEmpty());
t.close();
} finally {
admin.close();
}
}
{code}
was (Author: tdsilva):
I also tried creating a simple htable, but IndexQosRpcController.setPriority is
not getting called for this table.
{code}
@Test
public void testTableWriteWithQos() throws Exception {
final TableName tableName = TableName.valueOf("TEST");
Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
Connection conn = driver.connect(url, props);
PhoenixConnection phoenixConn = conn.unwrap(PhoenixConnection.class);
HBaseAdmin admin = phoenixConn.getQueryServices().getAdmin();
byte[][] SPLITS = new byte[][] {Bytes.toBytes(20), Bytes.toBytes(30)};
try {
// Create table then get the single region for our new table.
HTableDescriptor descriptor = new HTableDescriptor(tableName);
HColumnDescriptor columnDescriptor = new
HColumnDescriptor(Bytes.toBytes("cf"));
descriptor.addFamily(columnDescriptor);
admin.createTable(descriptor, SPLITS);
HTableInterface t =
phoenixConn.getQueryServices().getTable(Bytes.toBytes("TEST"));
byte[] k1 = Bytes.toBytes(15);
Put p = new Put(k1);
p.add(Bytes.toBytes("cf"), Bytes.toBytes("q1"),
Bytes.toBytes("value1"));
t.put(p);
byte[] k2 = Bytes.toBytes(25);
p = new Put(k2);
p.add(Bytes.toBytes("cf"), Bytes.toBytes("q2"),
Bytes.toBytes("value2"));
t.put(p);
byte[] k3 = Bytes.toBytes(35);
p = new Put(k3);
p.add(Bytes.toBytes("cf"), Bytes.toBytes("q3"),
Bytes.toBytes("value3"));
t.put(p);
t.flushCommits();
admin.flush(tableName.getName());
Result r = t.get(new Get(k1));
assertFalse(r.isEmpty());
r = t.get(new Get(k2));
assertFalse(r.isEmpty());
r = t.get(new Get(k3));
assertFalse(r.isEmpty());
t.close();
} finally {
admin.close();
}
}
{:code}
> Set priority of Index Updates correctly
> ----------------------------------------
>
> Key: PHOENIX-1676
> URL: https://issues.apache.org/jira/browse/PHOENIX-1676
> Project: Phoenix
> Issue Type: Bug
> Reporter: Thomas D'Silva
> Assignee: Thomas D'Silva
>
> I spoke to Jesse offline about this.
> The priority of index updates isn't being set correctly because of the use of
> CoprocessorHConnection (which all coprocessors use if they create an HTable
> via the CPEnvironment).
> Specifically the flow happens like this: the CoprocessorHTableFactory
> attempts to set the connection qos factory, but it is ignored because the
> CoprocessorHConnection is used (instead of a standard HConnection) and the
> #getClient method just goes straight into the rpc scheduler of the
> HRegionServer, if its on the same server. This allows the region to be
> directly accessed, but without actually going over the loopback or
> serializing any information.
> However, this means it ignores the configured rpccontroller factory and the
> override setting of the rpc priority. We probably shouldn't be runtime
> changing the configuration - instead we should probably be using some other
> serialized information.
> The primary fix would seems to be that the regionserver needs to be
> configured with the IndexQosRpcControllerFactory and then use a static map
> (or cache of the index metadata) to set the qos for the index servers.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)