123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530 |
- /**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- #include "libhdfs_wrapper.h"
- #include "libhdfspp_wrapper.h"
- #include "hdfs/hdfs.h"
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- /* Shim structs and functions that delegate to libhdfspp and libhdfs. */
- struct hdfs_internal {
- libhdfs_hdfsFS libhdfsRep;
- libhdfspp_hdfsFS libhdfsppRep;
- };
- typedef struct hdfs_internal* hdfsFS;
- struct hdfsFile_internal {
- libhdfs_hdfsFile libhdfsRep;
- libhdfspp_hdfsFile libhdfsppRep;
- };
- typedef struct hdfsFile_internal* hdfsFile;
- struct hdfsBuilder {
- struct hdfsBuilder * libhdfs_builder;
- struct hdfsBuilder * libhdfspp_builder;
- };
- #define REPORT_FUNCTION_NOT_IMPLEMENTED \
- fprintf(stderr, "%s failed: function not implemented by " \
- "libhdfs++ test shim", __PRETTY_FUNCTION__);
- int hdfsFileIsOpenForWrite(hdfsFile file) {
- return libhdfs_hdfsFileIsOpenForWrite(file->libhdfsRep);
- }
- int hdfsFileGetReadStatistics(hdfsFile file, struct hdfsReadStatistics **stats) {
- //We do not track which bytes were remote or local, so we assume all are local
- int ret = libhdfspp_hdfsFileGetReadStatistics(file->libhdfsppRep, (struct libhdfspp_hdfsReadStatistics **)stats);
- if(!ret) {
- (*stats)->totalLocalBytesRead = (*stats)->totalBytesRead;
- }
- return ret;
- }
- int64_t hdfsReadStatisticsGetRemoteBytesRead(const struct hdfsReadStatistics *stats) {
- return libhdfspp_hdfsReadStatisticsGetRemoteBytesRead((struct libhdfspp_hdfsReadStatistics *)stats);
- }
- int hdfsFileClearReadStatistics(hdfsFile file) {
- return libhdfspp_hdfsFileClearReadStatistics(file->libhdfsppRep);
- }
- void hdfsFileFreeReadStatistics(struct hdfsReadStatistics *stats) {
- libhdfspp_hdfsFileFreeReadStatistics((struct libhdfspp_hdfsReadStatistics *)stats);
- }
- hdfsFS hdfsConnectAsUser(const char* nn, tPort port, const char *user) {
- hdfsFS ret = calloc(1, sizeof(struct hdfs_internal));
- ret->libhdfsRep = libhdfs_hdfsConnectAsUser(nn, port, user);
- if (!ret->libhdfsRep) {
- libhdfs_hdfsDisconnect(ret->libhdfsRep);
- free(ret);
- return NULL;
- }
- ret->libhdfsppRep = libhdfspp_hdfsConnectAsUser(nn, port, user);
- if (!ret->libhdfsppRep) {
- libhdfs_hdfsDisconnect(ret->libhdfsRep);
- free(ret);
- return NULL;
- }
- return ret;
- }
- hdfsFS hdfsConnect(const char* nn, tPort port) {
- hdfsFS ret = calloc(1, sizeof(struct hdfs_internal));
- ret->libhdfsRep = libhdfs_hdfsConnect(nn, port);
- if (!ret->libhdfsRep) {
- libhdfs_hdfsDisconnect(ret->libhdfsRep);
- free(ret);
- return NULL;
- }
- ret->libhdfsppRep = libhdfspp_hdfsConnect(nn, port);
- if (!ret->libhdfsppRep) {
- libhdfs_hdfsDisconnect(ret->libhdfsRep);
- free(ret);
- return NULL;
- }
- return ret;
- }
- hdfsFS hdfsConnectAsUserNewInstance(const char* nn, tPort port, const char *user ) {
- hdfsFS ret = calloc(1, sizeof(struct hdfs_internal));
- ret->libhdfsRep = libhdfs_hdfsConnectAsUserNewInstance(nn, port, user);
- if (!ret->libhdfsRep) {
- libhdfs_hdfsDisconnect(ret->libhdfsRep);
- free(ret);
- return NULL;
- }
- ret->libhdfsppRep = libhdfspp_hdfsConnectAsUserNewInstance(nn, port, user);
- if (!ret->libhdfsppRep) {
- libhdfs_hdfsDisconnect(ret->libhdfsRep);
- free(ret);
- return NULL;
- }
- return ret;
- }
- hdfsFS hdfsConnectNewInstance(const char* nn, tPort port) {
- hdfsFS ret = calloc(1, sizeof(struct hdfs_internal));
- ret->libhdfsRep = libhdfs_hdfsConnectNewInstance(nn, port);
- if (!ret->libhdfsRep) {
- libhdfs_hdfsDisconnect(ret->libhdfsRep);
- free(ret);
- return NULL;
- }
- ret->libhdfsppRep = libhdfspp_hdfsConnectNewInstance(nn, port);
- if (!ret->libhdfsppRep) {
- libhdfs_hdfsDisconnect(ret->libhdfsRep);
- free(ret);
- return NULL;
- }
- return ret;
- }
- hdfsFS hdfsBuilderConnect(struct hdfsBuilder *bld) {
- hdfsFS ret = calloc(1, sizeof(struct hdfs_internal));
- ret->libhdfsRep = libhdfs_hdfsBuilderConnect(bld->libhdfs_builder);
- if (!ret->libhdfsRep) {
- free(ret);
- return NULL;
- }
- /* Destroys bld object. */
- ret->libhdfsppRep = libhdfspp_hdfsBuilderConnect(bld->libhdfspp_builder);
- if (!ret->libhdfsppRep) {
- libhdfs_hdfsDisconnect(ret->libhdfsRep);
- free(ret);
- return NULL;
- }
- return ret;
- }
- struct hdfsBuilder *hdfsNewBuilder(void) {
- struct hdfsBuilder * result = calloc(1, sizeof(struct hdfsBuilder));
- result -> libhdfs_builder = libhdfs_hdfsNewBuilder();
- result -> libhdfspp_builder = libhdfspp_hdfsNewBuilder();
- return result;
- }
- void hdfsBuilderSetForceNewInstance(struct hdfsBuilder *bld) {
- libhdfs_hdfsBuilderSetForceNewInstance(bld->libhdfs_builder);
- libhdfspp_hdfsBuilderSetForceNewInstance(bld->libhdfspp_builder);
- }
- void hdfsBuilderSetNameNode(struct hdfsBuilder *bld, const char *nn) {
- libhdfs_hdfsBuilderSetNameNode(bld->libhdfs_builder, nn);
- libhdfspp_hdfsBuilderSetNameNode(bld->libhdfspp_builder, nn);
- }
- void hdfsBuilderSetNameNodePort(struct hdfsBuilder *bld, tPort port) {
- libhdfs_hdfsBuilderSetNameNodePort(bld->libhdfs_builder, port);
- libhdfspp_hdfsBuilderSetNameNodePort(bld->libhdfspp_builder, port);
- }
- void hdfsBuilderSetUserName(struct hdfsBuilder *bld, const char *userName) {
- libhdfs_hdfsBuilderSetUserName(bld->libhdfs_builder, userName);
- libhdfspp_hdfsBuilderSetUserName(bld->libhdfspp_builder, userName);
- }
- void hdfsBuilderSetKerbTicketCachePath(struct hdfsBuilder *bld,
- const char *kerbTicketCachePath) {
- REPORT_FUNCTION_NOT_IMPLEMENTED
- }
- void hdfsFreeBuilder(struct hdfsBuilder *bld) {
- libhdfs_hdfsFreeBuilder(bld->libhdfs_builder);
- libhdfspp_hdfsFreeBuilder(bld->libhdfspp_builder);
- free(bld);
- }
- int hdfsBuilderConfSetStr(struct hdfsBuilder *bld, const char *key,
- const char *val) {
- int ret = libhdfs_hdfsBuilderConfSetStr(bld->libhdfs_builder, key, val);
- if (ret) {
- return ret;
- }
- ret = libhdfspp_hdfsBuilderConfSetStr(bld->libhdfspp_builder, key, val);
- if (ret) {
- return ret;
- }
- return 0;
- }
- int hdfsConfGetStr(const char *key, char **val) {
- return libhdfspp_hdfsConfGetStr(key, val);
- }
- int hdfsConfGetInt(const char *key, int32_t *val) {
- return libhdfspp_hdfsConfGetInt(key, val);
- }
- void hdfsConfStrFree(char *val) {
- libhdfspp_hdfsConfStrFree(val);
- }
- int hdfsDisconnect(hdfsFS fs) {
- int ret1 = libhdfs_hdfsDisconnect(fs->libhdfsRep);
- int ret2 = libhdfspp_hdfsDisconnect(fs->libhdfsppRep);
- free(fs);
- if (ret1){
- return ret1;
- } else if (ret2){
- return ret2;
- } else {
- return 0;
- }
- }
- hdfsFile hdfsOpenFile(hdfsFS fs, const char* path, int flags,
- int bufferSize, short replication, tSize blocksize) {
- hdfsFile ret = calloc(1, sizeof(struct hdfsFile_internal));
- /* Currently only open libhdf++ for reads. */
- ret->libhdfsppRep = 0;
- if (flags == O_RDONLY) {
- ret->libhdfsppRep = libhdfspp_hdfsOpenFile(fs->libhdfsppRep, path, flags,
- bufferSize, replication, blocksize);
- }
- ret->libhdfsRep = libhdfs_hdfsOpenFile(fs->libhdfsRep, path,
- flags, bufferSize, replication, blocksize);
- if (!ret->libhdfsRep) {
- free(ret);
- ret = NULL;
- }
- return ret;
- }
- int hdfsTruncateFile(hdfsFS fs, const char* path, tOffset newlength) {
- return libhdfs_hdfsTruncateFile(fs->libhdfsRep, path, newlength);
- }
- int hdfsUnbufferFile(hdfsFile file) {
- return libhdfs_hdfsUnbufferFile(file->libhdfsRep);
- }
- int hdfsCloseFile(hdfsFS fs, hdfsFile file) {
- int ret;
- if (file->libhdfsppRep) {
- libhdfspp_hdfsCloseFile(fs->libhdfsppRep, file->libhdfsppRep);
- }
- ret = libhdfs_hdfsCloseFile(fs->libhdfsRep, file->libhdfsRep);
- free(file);
- return ret;
- }
- int hdfsExists(hdfsFS fs, const char *path) {
- return libhdfspp_hdfsExists(fs->libhdfsppRep, path);
- }
- int hdfsSeek(hdfsFS fs, hdfsFile file, tOffset desiredPos) {
- int ret1 = libhdfs_hdfsSeek(fs->libhdfsRep, file->libhdfsRep, desiredPos);
- int ret2 = libhdfspp_hdfsSeek(fs->libhdfsppRep, file->libhdfsppRep, desiredPos);
- if (ret1) {
- return ret1;
- } else if (ret2) {
- return ret2;
- } else {
- return 0;
- }
- }
- tOffset hdfsTell(hdfsFS fs, hdfsFile file) {
- tOffset ret1 = libhdfs_hdfsTell(fs->libhdfsRep, file->libhdfsRep);
- tOffset ret2 = libhdfspp_hdfsTell(fs->libhdfsppRep, file->libhdfsppRep);
- if (ret1 != ret2) {
- errno = EIO;
- return -1;
- } else {
- return ret1;
- }
- }
- tSize hdfsRead(hdfsFS fs, hdfsFile file, void* buffer, tSize length) {
- // Read to update stats.
- tSize nRead = libhdfs_hdfsRead(fs->libhdfsRep, file->libhdfsRep, buffer, length);
- // Clear to avoid false positives.
- if (nRead > 0) memset(buffer, 0, nRead);
- return libhdfspp_hdfsRead(fs->libhdfsppRep, file->libhdfsppRep, buffer, length);
- }
- tSize hdfsPread(hdfsFS fs, hdfsFile file, tOffset position,
- void* buffer, tSize length) {
- tSize ret = -1;
- if (!fs->libhdfsppRep) {
- fprintf(stderr, "hdfsPread failed: no libhdfs++ file system");
- } else if (!file->libhdfsppRep) {
- fprintf(stderr, "hdfsPread failed: no libhdfs++ file");
- } else {
- ret = libhdfspp_hdfsPread(fs->libhdfsppRep, file->libhdfsppRep,
- position, buffer, length);
- }
- return ret;
- }
- int hdfsPreadFully(hdfsFS fs, hdfsFile file, tOffset position,
- void* buffer, tSize length) {
- return libhdfs_hdfsPreadFully(fs->libhdfsRep, file->libhdfsRep, position,
- buffer, length);
- }
- tSize hdfsWrite(hdfsFS fs, hdfsFile file, const void* buffer,
- tSize length) {
- return libhdfs_hdfsWrite(fs->libhdfsRep, file->libhdfsRep, buffer, length);
- }
- int hdfsFlush(hdfsFS fs, hdfsFile file) {
- return libhdfs_hdfsFlush(fs->libhdfsRep, file->libhdfsRep);
- }
- int hdfsHFlush(hdfsFS fs, hdfsFile file) {
- return libhdfs_hdfsHFlush(fs->libhdfsRep, file->libhdfsRep);
- }
- int hdfsHSync(hdfsFS fs, hdfsFile file) {
- return libhdfs_hdfsHSync(fs->libhdfsRep, file->libhdfsRep);
- }
- int hdfsAvailable(hdfsFS fs, hdfsFile file) {
- return libhdfspp_hdfsAvailable(fs->libhdfsppRep, file->libhdfsppRep);
- }
- int hdfsCopy(hdfsFS srcFS, const char* src, hdfsFS dstFS, const char* dst) {
- return libhdfs_hdfsCopy(srcFS->libhdfsRep, src, dstFS->libhdfsRep, dst);
- }
- int hdfsMove(hdfsFS srcFS, const char* src, hdfsFS dstFS, const char* dst) {
- return libhdfs_hdfsMove(srcFS->libhdfsRep, src, dstFS->libhdfsRep, dst);
- }
- int hdfsDelete(hdfsFS fs, const char* path, int recursive) {
- return libhdfspp_hdfsDelete(fs->libhdfsppRep, path, recursive);
- }
- int hdfsRename(hdfsFS fs, const char* oldPath, const char* newPath) {
- return libhdfspp_hdfsRename(fs->libhdfsppRep, oldPath, newPath);
- }
- char* hdfsGetWorkingDirectory(hdfsFS fs, char *buffer, size_t bufferSize) {
- return libhdfspp_hdfsGetWorkingDirectory(fs->libhdfsppRep, buffer, bufferSize);
- }
- int hdfsSetWorkingDirectory(hdfsFS fs, const char* path) {
- int ret1 = libhdfspp_hdfsSetWorkingDirectory(fs->libhdfsppRep, path);
- int ret2 = libhdfs_hdfsSetWorkingDirectory(fs->libhdfsRep, path);
- if (ret1) {
- return ret1;
- } else if (ret2) {
- return ret2;
- } else {
- return 0;
- }
- }
- int hdfsCreateDirectory(hdfsFS fs, const char* path) {
- return libhdfspp_hdfsCreateDirectory(fs->libhdfsppRep, path);
- }
- int hdfsSetReplication(hdfsFS fs, const char* path, int16_t replication) {
- return libhdfspp_hdfsSetReplication(fs->libhdfsppRep, path, replication);
- }
- hdfsFileInfo *hdfsListDirectory(hdfsFS fs, const char* path,
- int *numEntries) {
- return (hdfsFileInfo *)libhdfspp_hdfsListDirectory(fs->libhdfsppRep, path, numEntries);
- }
- hdfsFileInfo *hdfsGetPathInfo(hdfsFS fs, const char* path) {
- return (hdfsFileInfo *)libhdfspp_hdfsGetPathInfo(fs->libhdfsppRep, path);
- }
- void hdfsFreeFileInfo(hdfsFileInfo *hdfsFileInfo, int numEntries) {
- return libhdfspp_hdfsFreeFileInfo
- ((libhdfspp_hdfsFileInfo *) hdfsFileInfo, numEntries);
- }
- int hdfsFileIsEncrypted(hdfsFileInfo *hdfsFileInfo) {
- return libhdfs_hdfsFileIsEncrypted
- ((libhdfs_hdfsFileInfo *) hdfsFileInfo);
- }
- char*** hdfsGetHosts(hdfsFS fs, const char* path,
- tOffset start, tOffset length) {
- return libhdfspp_hdfsGetHosts(fs->libhdfsppRep, path, start, length);
- }
- void hdfsFreeHosts(char ***blockHosts) {
- return libhdfspp_hdfsFreeHosts(blockHosts);
- }
- tOffset hdfsGetDefaultBlockSize(hdfsFS fs) {
- return libhdfspp_hdfsGetDefaultBlockSize(fs->libhdfsppRep);
- }
- tOffset hdfsGetDefaultBlockSizeAtPath(hdfsFS fs, const char *path) {
- return libhdfspp_hdfsGetDefaultBlockSizeAtPath(fs->libhdfsppRep, path);
- }
- tOffset hdfsGetCapacity(hdfsFS fs) {
- return libhdfspp_hdfsGetCapacity(fs->libhdfsppRep);
- }
- tOffset hdfsGetUsed(hdfsFS fs) {
- return libhdfspp_hdfsGetUsed(fs->libhdfsppRep);
- }
- int hdfsChown(hdfsFS fs, const char* path, const char *owner,
- const char *group) {
- return libhdfspp_hdfsChown(fs->libhdfsppRep, path, owner, group);
- }
- int hdfsChmod(hdfsFS fs, const char* path, short mode) {
- return libhdfspp_hdfsChmod(fs->libhdfsppRep, path, mode);
- }
- int hdfsUtime(hdfsFS fs, const char* path, tTime mtime, tTime atime) {
- return libhdfspp_hdfsUtime(fs->libhdfsppRep, path, mtime, atime);
- }
- struct hadoopRzOptions *hadoopRzOptionsAlloc(void) {
- return libhdfs_hadoopRzOptionsAlloc();
- }
- int hadoopRzOptionsSetSkipChecksum(
- struct hadoopRzOptions *opts, int skip) {
- return libhdfs_hadoopRzOptionsSetSkipChecksum(opts, skip);
- }
- int hadoopRzOptionsSetByteBufferPool(
- struct hadoopRzOptions *opts, const char *className) {
- return libhdfs_hadoopRzOptionsSetByteBufferPool(opts, className);
- }
- void hadoopRzOptionsFree(struct hadoopRzOptions *opts) {
- libhdfs_hadoopRzOptionsFree(opts);
- }
- struct hadoopRzBuffer* hadoopReadZero(hdfsFile file,
- struct hadoopRzOptions *opts, int32_t maxLength) {
- return libhdfs_hadoopReadZero(file->libhdfsRep, opts, maxLength);
- }
- int32_t hadoopRzBufferLength(const struct hadoopRzBuffer *buffer) {
- return libhdfs_hadoopRzBufferLength(buffer);
- }
- const void *hadoopRzBufferGet(const struct hadoopRzBuffer *buffer) {
- return libhdfs_hadoopRzBufferGet(buffer);
- }
- void hadoopRzBufferFree(hdfsFile file, struct hadoopRzBuffer *buffer) {
- return libhdfs_hadoopRzBufferFree(file->libhdfsRep, buffer);
- }
- int hdfsGetHedgedReadMetrics(hdfsFS fs, struct hdfsHedgedReadMetrics **metrics) {
- return libhdfs_hdfsGetHedgedReadMetrics(fs->libhdfsRep, (struct libhdfs_hdfsHedgedReadMetrics **) metrics);
- }
- void hdfsFreeHedgedReadMetrics(struct hdfsHedgedReadMetrics *metrics) {
- return libhdfs_hdfsFreeHedgedReadMetrics((struct libhdfs_hdfsHedgedReadMetrics *) metrics);
- }
- /*************
- * hdfs_ext functions
- */
- int hdfsGetLastError(char *buf, int len) {
- return libhdfspp_hdfsGetLastError(buf, len);
- }
- int hdfsCancel(hdfsFS fs, hdfsFile file) {
- return libhdfspp_hdfsCancel(fs->libhdfsppRep, file->libhdfsppRep);
- }
- int hdfsGetBlockLocations(hdfsFS fs, const char *path, struct hdfsBlockLocations ** locations) {
- return libhdfspp_hdfsGetBlockLocations(fs->libhdfsppRep, path, locations);
- }
- int hdfsFreeBlockLocations(struct hdfsBlockLocations * locations) {
- return libhdfspp_hdfsFreeBlockLocations(locations);
- }
- hdfsFileInfo *hdfsFind(hdfsFS fs, const char* path, const char* name, uint32_t *numEntries) {
- return (hdfsFileInfo *)libhdfspp_hdfsFind(fs->libhdfsppRep, path, name, numEntries);
- }
- int hdfsCreateSnapshot(hdfsFS fs, const char* path, const char* name) {
- return libhdfspp_hdfsCreateSnapshot(fs->libhdfsppRep, path, name);
- }
- int hdfsDeleteSnapshot(hdfsFS fs, const char* path, const char* name) {
- return libhdfspp_hdfsDeleteSnapshot(fs->libhdfsppRep, path, name);
- }
- int hdfsRenameSnapshot(hdfsFS fs, const char* path, const char* old_name, const char* new_name) {
- return libhdfspp_hdfsRenameSnapshot(fs->libhdfsppRep, path, old_name, new_name);
- }
- int hdfsAllowSnapshot(hdfsFS fs, const char* path) {
- return libhdfspp_hdfsAllowSnapshot(fs->libhdfsppRep, path);
- }
- int hdfsDisallowSnapshot(hdfsFS fs, const char* path) {
- return libhdfspp_hdfsDisallowSnapshot(fs->libhdfsppRep, path);
- }
|