15 package com.cloudera.impala.service;
17 import java.util.ArrayList;
18 import java.util.List;
19 import java.util.UUID;
21 import org.apache.thrift.TException;
22 import org.apache.thrift.TSerializer;
23 import org.apache.thrift.protocol.TBinaryProtocol;
24 import org.slf4j.Logger;
25 import org.slf4j.LoggerFactory;
35 import com.cloudera.impala.thrift.TCatalogObject;
36 import com.cloudera.impala.thrift.TDdlExecRequest;
37 import com.cloudera.impala.thrift.TFunction;
38 import com.cloudera.impala.thrift.TGetAllCatalogObjectsResponse;
39 import com.cloudera.impala.thrift.TGetDbsParams;
40 import com.cloudera.impala.thrift.TGetDbsResult;
41 import com.cloudera.impala.thrift.TGetFunctionsRequest;
42 import com.cloudera.impala.thrift.TGetFunctionsResponse;
43 import com.cloudera.impala.thrift.TGetTablesParams;
44 import com.cloudera.impala.thrift.TGetTablesResult;
45 import com.cloudera.impala.thrift.TLogLevel;
46 import com.cloudera.impala.thrift.TPrioritizeLoadRequest;
47 import com.cloudera.impala.thrift.TResetMetadataRequest;
48 import com.cloudera.impala.thrift.TSentryAdminCheckRequest;
49 import com.cloudera.impala.thrift.TUniqueId;
50 import com.cloudera.impala.thrift.TUpdateCatalogRequest;
52 import com.google.common.base.Preconditions;
53 import com.google.common.base.Strings;
60 private final static Logger
LOG = LoggerFactory.getLogger(JniCatalog.class);
62 new TBinaryProtocol.Factory();
70 UUID uuid = UUID.randomUUID();
71 return new TUniqueId(uuid.getMostSignificantBits(), uuid.getLeastSignificantBits());
74 public JniCatalog(
boolean loadInBackground,
int numMetadataLoadingThreads,
75 String sentryServiceConfig,
int impalaLogLevel,
int otherLogLevel)
77 Preconditions.checkArgument(numMetadataLoadingThreads > 0);
80 GlogAppender.Install(TLogLevel.values()[impalaLogLevel],
81 TLogLevel.values()[otherLogLevel]);
85 if (!Strings.isNullOrEmpty(sentryServiceConfig)) {
87 sentryConfig.loadConfig();
89 LOG.info(JniUtil.getJavaVersion());
92 numMetadataLoadingThreads, sentryConfig,
getServiceId());
96 LOG.error(
"Error initialializing Catalog. Please run 'invalidate metadata'", e);
107 TGetAllCatalogObjectsResponse resp =
108 catalog_.getCatalogObjects(from_version);
110 return serializer.serialize(resp);
117 return catalog_.getCatalogVersion();
124 TDdlExecRequest params =
new TDdlExecRequest();
126 TSerializer serializer =
new TSerializer(protocolFactory_);
128 return serializer.serialize(catalogOpExecutor_.execDdlRequest(params));
129 }
catch (TException e) {
139 TResetMetadataRequest req =
new TResetMetadataRequest();
141 TSerializer serializer =
new TSerializer(protocolFactory_);
142 return serializer.serialize(catalogOpExecutor_.execResetMetadata(req));
152 TGetDbsParams params =
new TGetDbsParams();
154 TGetDbsResult result =
new TGetDbsResult();
155 result.setDbs(catalog_.getDbNames(null));
156 TSerializer serializer =
new TSerializer(protocolFactory_);
157 return serializer.serialize(result);
167 TGetTablesParams params =
new TGetTablesParams();
169 List<String> tables = catalog_.getTableNames(params.db, params.pattern);
170 TGetTablesResult result =
new TGetTablesResult();
171 result.setTables(tables);
172 TSerializer serializer =
new TSerializer(protocolFactory_);
173 return serializer.serialize(result);
181 TCatalogObject objectDescription =
new TCatalogObject();
182 JniUtil.deserializeThrift(
protocolFactory_, objectDescription, thriftParams);
183 TSerializer serializer =
new TSerializer(protocolFactory_);
184 return serializer.serialize(catalog_.getTCatalogObject(objectDescription));
192 TGetFunctionsRequest request =
new TGetFunctionsRequest();
194 TSerializer serializer =
new TSerializer(protocolFactory_);
195 if (!request.isSetDb_name()) {
201 List<Function> fns = catalog_.getFunctions(request.getDb_name());
202 TGetFunctionsResponse response =
new TGetFunctionsResponse();
203 response.setFunctions(
new ArrayList<TFunction>(fns.size()));
205 response.addToFunctions(fn.toThrift());
208 return serializer.serialize(response);
213 TPrioritizeLoadRequest request =
new TPrioritizeLoadRequest();
215 catalog_.prioritizeLoad(request.getObject_descs());
225 TSentryAdminCheckRequest request =
new TSentryAdminCheckRequest();
228 new User(request.getHeader().getRequesting_user()));
237 TUpdateCatalogRequest request =
new TUpdateCatalogRequest();
239 TSerializer serializer =
new TSerializer(protocolFactory_);
240 return serializer.serialize(catalogOpExecutor_.updateCatalog(request));
byte[] getDbNames(byte[] thriftGetTablesParams)
byte[] execDdl(byte[] thriftDdlExecReq)
byte[] getCatalogObjects(long from_version)
byte[] getCatalogObject(byte[] thriftParams)
void prioritizeLoad(byte[] thriftLoadReq)
byte[] getFunctions(byte[] thriftParams)
static TUniqueId generateId()
static TUniqueId getServiceId()
byte[] resetMetadata(byte[] thriftResetMetadataReq)
byte[] updateCatalog(byte[] thriftUpdateCatalog)
JniCatalog(boolean loadInBackground, int numMetadataLoadingThreads, String sentryServiceConfig, int impalaLogLevel, int otherLogLevel)
static final TBinaryProtocol.Factory protocolFactory_
final CatalogServiceCatalog catalog_
void checkUserSentryAdmin(byte[] thriftReq)
final CatalogOpExecutor catalogOpExecutor_
byte[] getTableNames(byte[] thriftGetTablesParams)
static final TUniqueId catalogServiceId_