private int showLocks(ShowLocksDesc showLocks) throws HiveException {
Context ctx = driverContext.getCtx();
HiveLockManager lockMgr = ctx.getHiveLockMgr();
boolean isExt = showLocks.isExt();
if (lockMgr == null) {
throw new HiveException("show Locks LockManager not specified");
}
// write the results in the file
try {
Path resFile = new Path(showLocks.getResFile());
FileSystem fs = resFile.getFileSystem(conf);
DataOutput outStream = fs.create(resFile);
List<HiveLock> locks = null;
if (showLocks.getTableName() == null) {
locks = lockMgr.getLocks(false, isExt);
}
else {
locks = lockMgr.getLocks(getHiveObject(showLocks.getTableName(),
showLocks.getPartSpec()),
true, isExt);
}
Collections.sort(locks, new Comparator<HiveLock>() {
@Override
public int compare(HiveLock o1, HiveLock o2) {
int cmp = o1.getHiveLockObject().getName().compareTo(o2.getHiveLockObject().getName());
if (cmp == 0) {
if (o1.getHiveLockMode() == o2.getHiveLockMode()) {
return cmp;
}
// EXCLUSIVE locks occur before SHARED locks
if (o1.getHiveLockMode() == HiveLockMode.EXCLUSIVE) {
return -1;
}
return +1;
}
return cmp;
}
});
Iterator<HiveLock> locksIter = locks.iterator();
while (locksIter.hasNext()) {
HiveLock lock = locksIter.next();
outStream.writeBytes(lock.getHiveLockObject().getDisplayName());
outStream.write(separator);
outStream.writeBytes(lock.getHiveLockMode().toString());
if (isExt) {
outStream.write(terminator);
HiveLockObjectData lockData = lock.getHiveLockObject().getData();
if (lockData != null) {
outStream.writeBytes("LOCK_QUERYID:" + lockData.getQueryId() + " ");
outStream.writeBytes("LOCK_TIME:" + lockData.getLockTime() + " ");
outStream.writeBytes("LOCK_MODE:" + lockData.getLockMode() + " ");
}
}
outStream.write(terminator);
}
((FSDataOutputStream) outStream).close();
} catch (FileNotFoundException e) {
LOG.warn("show function: " + stringifyException(e));
return 1;
} catch (IOException e) {
LOG.warn("show function: " + stringifyException(e));
return 1;
} catch (Exception e) {
throw new HiveException(e.toString());
}
return 0;
}