Github user traflm commented on a diff in the pull request: https://github.com/apache/trafodion/pull/1532#discussion_r193921772 --- Diff: core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/client/transactional/TransactionManager.java --- @@ -3226,5 +3260,65 @@ public RecoveryRequestResponse call(TrxRegionService instance) throws IOExceptio return resultArray[0].getResultList(); } + + public void setStoragePolicy(String tblName, String policy) + throws IOException { + + int retryCount = 0; + int retrySleep = TM_SLEEP; + boolean retry = false; + try { + Table tbl = connection.getTable(TableName.valueOf(tblName)); + String rowkey = "0"; + CoprocessorRpcChannel channel = tbl.coprocessorService(rowkey.getBytes()); + org.apache.hadoop.hbase.coprocessor.transactional.generated.TrxRegionProtos.TrxRegionService.BlockingInterface service = + org.apache.hadoop.hbase.coprocessor.transactional.generated.TrxRegionProtos.TrxRegionService.newBlockingStub(channel); + org.apache.hadoop.hbase.coprocessor.transactional.generated.TrxRegionProtos.TrafSetStoragePolicyRequest.Builder request = + org.apache.hadoop.hbase.coprocessor.transactional.generated.TrxRegionProtos.TrafSetStoragePolicyRequest.newBuilder(); + String hbaseRoot = config.get("hbase.rootdir"); + FileSystem fs = FileSystem.get(config); + //Construct the HDFS dir + //find out if namespace is there + String[] parts = tblName.split(":"); + String namespacestr=""; + String fullPath = hbaseRoot + "/data/" ; + String fullPath2 = hbaseRoot + "/data/default/"; + if(fs.exists(new Path(fullPath2))) + fullPath = fullPath2; + + if(parts.length >1) //have namespace + fullPath = fullPath + parts[0] + "/" + parts[1]; + else + fullPath = fullPath + tblName; + + request.setPath(fullPath); + request.setPolicy(policy); + + do { + org.apache.hadoop.hbase.coprocessor.transactional.generated.TrxRegionProtos.TrafSetStoragePolicyResponse ret = + service.setStoragePolicy(null,request.build()); + + //handle result and error + if( ret == null) + { + LOG.error("setStoragePolicy Response ret null "); + } + else if (ret.getStatus() == false) + { + LOG.error("setStoragePolicy Response ret false: " + ret.getException()); + throw new IOException(ret.getException()); + } + if(retryCount == RETRY_ATTEMPTS) + { + throw new IOException("coprocessor not response"); + } + if (retry) + retrySleep = retry(retrySleep); + } while (retry && retryCount++ < RETRY_ATTEMPTS); + } + catch (Exception e) { + throw new IOException(e); + } + } --- End diff -- thanks Selva! Sorry, I should be more careful, I never understand the LOG and exception clear, will change this.
---