Fixed bug in aiori-HDFS.c where it was calling "free(fd);", which is bad.
Along the way, added a bunch of diagnostic output in the HDFS calls, which only shows up at verbosity >= 4. I'll probably remove this stuff before merging with master. Also, there's an #ifdef'ed-out sleep() in place, which I used to attach gdb to a running MPI task. I'll get rid of that later, too. Also, added another hdfs-related parameter to the IOR_param_t structure; hdfs_user_name gets the value of the USER environment-variable as the default HDFS user for connections. Does this cause portability problems?master
parent
0743eaf3fd
commit
28c94f8875
|
@ -25,10 +25,7 @@ src/stamp-h1
|
||||||
NOTES.txt
|
NOTES.txt
|
||||||
autom4te.cache
|
autom4te.cache
|
||||||
contrib/cbif.o
|
contrib/cbif.o
|
||||||
src/aiori-MPIIO.o
|
src/*.o
|
||||||
src/aiori-PLFS.c
|
src/*.i
|
||||||
src/aiori-POSIX.o
|
src/*.s
|
||||||
src/ior
|
src/ior
|
||||||
src/ior.o
|
|
||||||
src/parse_options.o
|
|
||||||
src/utilities.o
|
|
||||||
|
|
156
src/aiori-HDFS.c
156
src/aiori-HDFS.c
|
@ -51,6 +51,11 @@
|
||||||
*
|
*
|
||||||
* Implement of abstract I/O interface for HDFS.
|
* Implement of abstract I/O interface for HDFS.
|
||||||
*
|
*
|
||||||
|
* HDFS has the added concept of a "File System Handle" which has to be
|
||||||
|
* connected before files are opened. We store this in the IOR_param_t
|
||||||
|
* object that is always passed to our functions. The thing that callers
|
||||||
|
* think of as the "fd" is an hdfsFile, (a pointer).
|
||||||
|
*
|
||||||
\******************************************************************************/
|
\******************************************************************************/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
|
@ -154,45 +159,70 @@ void hdfs_set_o_direct_flag(int *fd)
|
||||||
* filesystem is connected.
|
* filesystem is connected.
|
||||||
*/
|
*/
|
||||||
static void hdfs_connect( IOR_param_t* param ) {
|
static void hdfs_connect( IOR_param_t* param ) {
|
||||||
|
if (param->verbose >= VERBOSE_4) {
|
||||||
|
printf("-> hdfs_connect [nn:\"%s\", port:%d, user:%s]\n",
|
||||||
|
param->hdfs_name_node,
|
||||||
|
param->hdfs_name_node_port,
|
||||||
|
param->hdfs_user );
|
||||||
|
}
|
||||||
|
|
||||||
if ( param->hdfs_fs )
|
if ( param->hdfs_fs ) {
|
||||||
|
if (param->verbose >= VERBOSE_4) {
|
||||||
|
printf("<- hdfs_connect [nothing to do]\n"); /* DEBUGGING */
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* initialize a builder, holding parameters for hdfsBuilderConnect() */
|
/* initialize a builder, holding parameters for hdfsBuilderConnect() */
|
||||||
struct hdfsBuilder* builder = hdfsNewBuilder();
|
struct hdfsBuilder* builder = hdfsNewBuilder();
|
||||||
if ( ! builder )
|
if ( ! builder )
|
||||||
ERR_SIMPLE("couldn't create and hdsfsBuilder");
|
ERR_SIMPLE("couldn't create an hdfsBuilder");
|
||||||
|
|
||||||
hdfsBuilderSetForceNewInstance ( builder ); /* don't use cached instance */
|
hdfsBuilderSetForceNewInstance ( builder ); /* don't use cached instance */
|
||||||
|
|
||||||
hdfsBuilderSetNameNode ( builder, param->hdfs_name_node );
|
hdfsBuilderSetNameNode ( builder, param->hdfs_name_node );
|
||||||
hdfsBuilderSetNameNodePort( builder, param->hdfs_name_node_port );
|
hdfsBuilderSetNameNodePort( builder, param->hdfs_name_node_port );
|
||||||
|
hdfsBuilderSetUserName ( builder, param->hdfs_user );
|
||||||
|
|
||||||
/* NOTE: hdfsBuilderConnect() frees the builder */
|
/* NOTE: hdfsBuilderConnect() frees the builder */
|
||||||
param->hdfs_fs = hdfsBuilderConnect( builder );
|
param->hdfs_fs = hdfsBuilderConnect( builder );
|
||||||
if ( ! param->hdfs_fs )
|
if ( ! param->hdfs_fs )
|
||||||
ERR_SIMPLE("hdsfsBuilderConnect failed");
|
ERR_SIMPLE("hdsfsBuilderConnect failed");
|
||||||
|
|
||||||
|
if (param->verbose >= VERBOSE_4) {
|
||||||
|
printf("<- hdfs_connect [success]\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void hdfs_disconnect( IOR_param_t* param ) {
|
static void hdfs_disconnect( IOR_param_t* param ) {
|
||||||
|
if (param->verbose >= VERBOSE_4) {
|
||||||
|
printf("-> hdfs_disconnect\n");
|
||||||
|
}
|
||||||
if ( param->hdfs_fs ) {
|
if ( param->hdfs_fs ) {
|
||||||
hdfsDisconnect( param->hdfs_fs );
|
hdfsDisconnect( param->hdfs_fs );
|
||||||
|
param->hdfs_fs = NULL;
|
||||||
|
}
|
||||||
|
if (param->verbose >= VERBOSE_4) {
|
||||||
|
printf("<- hdfs_disconnect\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Create or open the file. Pass TRUE if creating and FALSE if opening an existing file.
|
* Create or open the file. Pass TRUE if creating and FALSE if opening an existing file.
|
||||||
|
* Return an hdfsFile.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void *HDFS_Create_Or_Open( char *testFileName, IOR_param_t *param, unsigned char createFile ) {
|
static void *HDFS_Create_Or_Open( char *testFileName, IOR_param_t *param, unsigned char createFile ) {
|
||||||
|
if (param->verbose >= VERBOSE_4) {
|
||||||
|
printf("-> HDFS_Create_Or_Open\n");
|
||||||
|
}
|
||||||
|
|
||||||
hdfsFile hdfs_file = NULL;
|
hdfsFile hdfs_file = NULL;
|
||||||
int fd_oflags = 0, hdfs_return;
|
int fd_oflags = 0, hdfs_return;
|
||||||
|
|
||||||
/* initialize file-system handle, if needed */
|
/* initialize file-system handle, if needed */
|
||||||
if ( ! param->hdfs_fs ) {
|
hdfs_connect( param );
|
||||||
hdfs_connect( param );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check for unsupported flags.
|
* Check for unsupported flags.
|
||||||
|
@ -270,13 +300,21 @@ static void *HDFS_Create_Or_Open( char *testFileName, IOR_param_t *param, unsign
|
||||||
* Now rank zero can open and truncate, if necessary.
|
* Now rank zero can open and truncate, if necessary.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
if (param->verbose >= VERBOSE_4) {
|
||||||
|
printf("\thdfsOpenFile(0x%llx, %s, 0%o, %d, %d, %d)\n",
|
||||||
|
param->hdfs_fs,
|
||||||
|
testFileName,
|
||||||
|
fd_oflags, /* shown in octal to compare w/ <bits/fcntl.h> */
|
||||||
|
param->transferSize,
|
||||||
|
param->hdfs_replicas,
|
||||||
|
param->hdfs_block_size);
|
||||||
|
}
|
||||||
hdfs_file = hdfsOpenFile( param->hdfs_fs,
|
hdfs_file = hdfsOpenFile( param->hdfs_fs,
|
||||||
testFileName,
|
testFileName,
|
||||||
fd_oflags,
|
fd_oflags,
|
||||||
param->transferSize,
|
param->transferSize,
|
||||||
param->hdfs_replicas,
|
param->hdfs_replicas,
|
||||||
param->hdfs_block_size);
|
param->hdfs_block_size);
|
||||||
|
|
||||||
if ( ! hdfs_file ) {
|
if ( ! hdfs_file ) {
|
||||||
ERR( "Failed to open the file" );
|
ERR( "Failed to open the file" );
|
||||||
}
|
}
|
||||||
|
@ -292,6 +330,9 @@ static void *HDFS_Create_Or_Open( char *testFileName, IOR_param_t *param, unsign
|
||||||
MPI_CHECK(MPI_Barrier(testComm), "barrier error");
|
MPI_CHECK(MPI_Barrier(testComm), "barrier error");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (param->verbose >= VERBOSE_4) {
|
||||||
|
printf("<- HDFS_Create_Or_Open\n");
|
||||||
|
}
|
||||||
return ((void *) hdfs_file );
|
return ((void *) hdfs_file );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -300,7 +341,13 @@ static void *HDFS_Create_Or_Open( char *testFileName, IOR_param_t *param, unsign
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void *HDFS_Create( char *testFileName, IOR_param_t * param ) {
|
static void *HDFS_Create( char *testFileName, IOR_param_t * param ) {
|
||||||
|
if (param->verbose >= VERBOSE_4) {
|
||||||
|
printf("-> HDFS_Create\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (param->verbose >= VERBOSE_4) {
|
||||||
|
printf("<- HDFS_Create\n");
|
||||||
|
}
|
||||||
return HDFS_Create_Or_Open( testFileName, param, TRUE );
|
return HDFS_Create_Or_Open( testFileName, param, TRUE );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -308,11 +355,20 @@ static void *HDFS_Create( char *testFileName, IOR_param_t * param ) {
|
||||||
* Open a file through the HDFS interface.
|
* Open a file through the HDFS interface.
|
||||||
*/
|
*/
|
||||||
static void *HDFS_Open( char *testFileName, IOR_param_t * param ) {
|
static void *HDFS_Open( char *testFileName, IOR_param_t * param ) {
|
||||||
|
if (param->verbose >= VERBOSE_4) {
|
||||||
|
printf("-> HDFS_Open\n");
|
||||||
|
}
|
||||||
|
|
||||||
if ( param->openFlags & IOR_CREAT ) {
|
if ( param->openFlags & IOR_CREAT ) {
|
||||||
|
if (param->verbose >= VERBOSE_4) {
|
||||||
|
printf("<- HDFS_Open( ... TRUE)\n");
|
||||||
|
}
|
||||||
return HDFS_Create_Or_Open( testFileName, param, TRUE );
|
return HDFS_Create_Or_Open( testFileName, param, TRUE );
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
if (param->verbose >= VERBOSE_4) {
|
||||||
|
printf("<- HDFS_Open( ... FALSE)\n");
|
||||||
|
}
|
||||||
return HDFS_Create_Or_Open( testFileName, param, FALSE );
|
return HDFS_Create_Or_Open( testFileName, param, FALSE );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -323,6 +379,10 @@ static void *HDFS_Open( char *testFileName, IOR_param_t * param ) {
|
||||||
|
|
||||||
static IOR_offset_t HDFS_Xfer(int access, void *file, IOR_size_t * buffer,
|
static IOR_offset_t HDFS_Xfer(int access, void *file, IOR_size_t * buffer,
|
||||||
IOR_offset_t length, IOR_param_t * param) {
|
IOR_offset_t length, IOR_param_t * param) {
|
||||||
|
if (param->verbose >= VERBOSE_4) {
|
||||||
|
printf("-> HDFS_Xfer(acc:%d, file:0x%llx, buf:0x%llx, len:%llu, 0x%llx)\n",
|
||||||
|
access, file, buffer, length, param);
|
||||||
|
}
|
||||||
|
|
||||||
int xferRetries = 0;
|
int xferRetries = 0;
|
||||||
long long remaining = (long long)length;
|
long long remaining = (long long)length;
|
||||||
|
@ -343,6 +403,10 @@ static IOR_offset_t HDFS_Xfer(int access, void *file, IOR_size_t * buffer,
|
||||||
param->offset + length - remaining);
|
param->offset + length - remaining);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (param->verbose >= VERBOSE_4) {
|
||||||
|
printf("\thdfsWrite( 0x%llx, 0x%llx, 0x%llx, %lld)\n",
|
||||||
|
hdfs_fs, hdfs_file, ptr, remaining ); /* DEBUGGING */
|
||||||
|
}
|
||||||
rc = hdfsWrite( hdfs_fs, hdfs_file, ptr, remaining );
|
rc = hdfsWrite( hdfs_fs, hdfs_file, ptr, remaining );
|
||||||
if ( rc < 0 ) {
|
if ( rc < 0 ) {
|
||||||
ERR( "hdfsWrite() failed" );
|
ERR( "hdfsWrite() failed" );
|
||||||
|
@ -361,6 +425,10 @@ static IOR_offset_t HDFS_Xfer(int access, void *file, IOR_size_t * buffer,
|
||||||
param->offset + length - remaining );
|
param->offset + length - remaining );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (param->verbose >= VERBOSE_4) {
|
||||||
|
printf("\thdfsRead( 0x%llx, 0x%llx, 0x%llx, %lld)\n",
|
||||||
|
hdfs_fs, hdfs_file, ptr, remaining ); /* DEBUGGING */
|
||||||
|
}
|
||||||
rc = hdfsRead( hdfs_fs, hdfs_file, ptr, remaining );
|
rc = hdfsRead( hdfs_fs, hdfs_file, ptr, remaining );
|
||||||
|
|
||||||
if ( rc == 0 ) {
|
if ( rc == 0 ) {
|
||||||
|
@ -398,6 +466,9 @@ static IOR_offset_t HDFS_Xfer(int access, void *file, IOR_size_t * buffer,
|
||||||
xferRetries++;
|
xferRetries++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (param->verbose >= VERBOSE_4) {
|
||||||
|
printf("<- HDFS_Xfer\n");
|
||||||
|
}
|
||||||
return ( length );
|
return ( length );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -406,12 +477,37 @@ static IOR_offset_t HDFS_Xfer(int access, void *file, IOR_size_t * buffer,
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void HDFS_Fsync( void *fd, IOR_param_t * param ) {
|
static void HDFS_Fsync( void *fd, IOR_param_t * param ) {
|
||||||
|
if (param->verbose >= VERBOSE_4) {
|
||||||
|
printf("-> HDFS_Fsync\n");
|
||||||
|
}
|
||||||
hdfsFS hdfs_fs = param->hdfs_fs; /* (void *) */
|
hdfsFS hdfs_fs = param->hdfs_fs; /* (void *) */
|
||||||
hdfsFile hdfs_file = (hdfsFile)fd; /* (void *) */
|
hdfsFile hdfs_file = (hdfsFile)fd; /* (void *) */
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
if (param->verbose >= VERBOSE_4) {
|
||||||
|
printf("\thdfsHSync(0x%llx, 0x%llx)\n", hdfs_fs, hdfs_file);
|
||||||
|
}
|
||||||
if ( hdfsHSync( hdfs_fs, hdfs_file ) != 0 ) {
|
if ( hdfsHSync( hdfs_fs, hdfs_file ) != 0 ) {
|
||||||
EWARN( "hdfs_sync() failed" );
|
EWARN( "hdfsHSync() failed" );
|
||||||
|
}
|
||||||
|
#elif 0
|
||||||
|
if (param->verbose >= VERBOSE_4) {
|
||||||
|
printf("\thdfsHFlush(0x%llx, 0x%llx)\n", hdfs_fs, hdfs_file);
|
||||||
|
}
|
||||||
|
if ( hdfsHFlush( hdfs_fs, hdfs_file ) != 0 ) {
|
||||||
|
EWARN( "hdfsHFlush() failed" );
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
if (param->verbose >= VERBOSE_4) {
|
||||||
|
printf("\thdfsFlush(0x%llx, 0x%llx)\n", hdfs_fs, hdfs_file);
|
||||||
|
}
|
||||||
|
if ( hdfsFlush( hdfs_fs, hdfs_file ) != 0 ) {
|
||||||
|
EWARN( "hdfsFlush() failed" );
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (param->verbose >= VERBOSE_4) {
|
||||||
|
printf("<- HDFS_Fsync\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -420,6 +516,9 @@ static void HDFS_Fsync( void *fd, IOR_param_t * param ) {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void HDFS_Close( void *fd, IOR_param_t * param ) {
|
static void HDFS_Close( void *fd, IOR_param_t * param ) {
|
||||||
|
if (param->verbose >= VERBOSE_4) {
|
||||||
|
printf("-> HDFS_Close\n");
|
||||||
|
}
|
||||||
|
|
||||||
hdfsFS hdfs_fs = param->hdfs_fs; /* (void *) */
|
hdfsFS hdfs_fs = param->hdfs_fs; /* (void *) */
|
||||||
hdfsFile hdfs_file = (hdfsFile)fd; /* (void *) */
|
hdfsFile hdfs_file = (hdfsFile)fd; /* (void *) */
|
||||||
|
@ -436,7 +535,9 @@ static void HDFS_Close( void *fd, IOR_param_t * param ) {
|
||||||
ERR( "hdfsCloseFile() failed" );
|
ERR( "hdfsCloseFile() failed" );
|
||||||
}
|
}
|
||||||
|
|
||||||
free( fd );
|
if (param->verbose >= VERBOSE_4) {
|
||||||
|
printf("<- HDFS_Close\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -446,9 +547,15 @@ static void HDFS_Close( void *fd, IOR_param_t * param ) {
|
||||||
* select recursive deletes. We'll assume that that is never needed.
|
* select recursive deletes. We'll assume that that is never needed.
|
||||||
*/
|
*/
|
||||||
static void HDFS_Delete( char *testFileName, IOR_param_t * param ) {
|
static void HDFS_Delete( char *testFileName, IOR_param_t * param ) {
|
||||||
|
if (param->verbose >= VERBOSE_4) {
|
||||||
|
printf("-> HDFS_Delete\n");
|
||||||
|
}
|
||||||
|
|
||||||
char errmsg[256];
|
char errmsg[256];
|
||||||
|
|
||||||
|
/* initialize file-system handle, if needed */
|
||||||
|
hdfs_connect( param );
|
||||||
|
|
||||||
if ( ! param->hdfs_fs )
|
if ( ! param->hdfs_fs )
|
||||||
ERR_SIMPLE( "Can't delete a file without an HDFS connection" );
|
ERR_SIMPLE( "Can't delete a file without an HDFS connection" );
|
||||||
|
|
||||||
|
@ -459,6 +566,9 @@ static void HDFS_Delete( char *testFileName, IOR_param_t * param ) {
|
||||||
|
|
||||||
EWARN( errmsg );
|
EWARN( errmsg );
|
||||||
}
|
}
|
||||||
|
if (param->verbose >= VERBOSE_4) {
|
||||||
|
printf("<- HDFS_Delete\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -466,8 +576,14 @@ static void HDFS_Delete( char *testFileName, IOR_param_t * param ) {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void HDFS_SetVersion( IOR_param_t * param ) {
|
static void HDFS_SetVersion( IOR_param_t * param ) {
|
||||||
|
if (param->verbose >= VERBOSE_4) {
|
||||||
|
printf("-> HDFS_SetVersion\n");
|
||||||
|
}
|
||||||
|
|
||||||
strcpy( param->apiVersion, param->api );
|
strcpy( param->apiVersion, param->api );
|
||||||
|
if (param->verbose >= VERBOSE_4) {
|
||||||
|
printf("<- HDFS_SetVersion\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -480,6 +596,9 @@ static IOR_offset_t
|
||||||
HDFS_GetFileSize(IOR_param_t * param,
|
HDFS_GetFileSize(IOR_param_t * param,
|
||||||
MPI_Comm testComm,
|
MPI_Comm testComm,
|
||||||
char * testFileName) {
|
char * testFileName) {
|
||||||
|
if (param->verbose >= VERBOSE_4) {
|
||||||
|
printf("-> HDFS_GetFileSize(%s)\n", testFileName);
|
||||||
|
}
|
||||||
|
|
||||||
IOR_offset_t aggFileSizeFromStat;
|
IOR_offset_t aggFileSizeFromStat;
|
||||||
IOR_offset_t tmpMin, tmpMax, tmpSum;
|
IOR_offset_t tmpMin, tmpMax, tmpSum;
|
||||||
|
@ -488,13 +607,23 @@ HDFS_GetFileSize(IOR_param_t * param,
|
||||||
hdfs_connect( param );
|
hdfs_connect( param );
|
||||||
|
|
||||||
/* file-info struct includes size in bytes */
|
/* file-info struct includes size in bytes */
|
||||||
|
if (param->verbose >= VERBOSE_4) {
|
||||||
|
printf("\thdfsGetPathInfo(%s) ...", testFileName);fflush(stdout);
|
||||||
|
}
|
||||||
|
|
||||||
hdfsFileInfo* info = hdfsGetPathInfo( param->hdfs_fs, testFileName );
|
hdfsFileInfo* info = hdfsGetPathInfo( param->hdfs_fs, testFileName );
|
||||||
if ( ! info )
|
if ( ! info )
|
||||||
ERR_SIMPLE( "hdfsGetPathInfo() failed" );
|
ERR_SIMPLE( "hdfsGetPathInfo() failed" );
|
||||||
|
if (param->verbose >= VERBOSE_4) {
|
||||||
|
printf("done.\n");fflush(stdout);
|
||||||
|
}
|
||||||
|
|
||||||
aggFileSizeFromStat = info->mSize;
|
aggFileSizeFromStat = info->mSize;
|
||||||
|
|
||||||
if ( param->filePerProc == TRUE ) {
|
if ( param->filePerProc == TRUE ) {
|
||||||
|
if (param->verbose >= VERBOSE_4) {
|
||||||
|
printf("\tall-reduce (1)\n");
|
||||||
|
}
|
||||||
MPI_CHECK(
|
MPI_CHECK(
|
||||||
MPI_Allreduce(
|
MPI_Allreduce(
|
||||||
&aggFileSizeFromStat, &tmpSum, 1, MPI_LONG_LONG_INT, MPI_SUM, testComm ),
|
&aggFileSizeFromStat, &tmpSum, 1, MPI_LONG_LONG_INT, MPI_SUM, testComm ),
|
||||||
|
@ -503,11 +632,17 @@ HDFS_GetFileSize(IOR_param_t * param,
|
||||||
aggFileSizeFromStat = tmpSum;
|
aggFileSizeFromStat = tmpSum;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
if (param->verbose >= VERBOSE_4) {
|
||||||
|
printf("\tall-reduce (2a)\n");
|
||||||
|
}
|
||||||
MPI_CHECK(
|
MPI_CHECK(
|
||||||
MPI_Allreduce(
|
MPI_Allreduce(
|
||||||
&aggFileSizeFromStat, &tmpMin, 1, MPI_LONG_LONG_INT, MPI_MIN, testComm ),
|
&aggFileSizeFromStat, &tmpMin, 1, MPI_LONG_LONG_INT, MPI_MIN, testComm ),
|
||||||
"cannot total data moved" );
|
"cannot total data moved" );
|
||||||
|
|
||||||
|
if (param->verbose >= VERBOSE_4) {
|
||||||
|
printf("\tall-reduce (2b)\n");
|
||||||
|
}
|
||||||
MPI_CHECK(
|
MPI_CHECK(
|
||||||
MPI_Allreduce(
|
MPI_Allreduce(
|
||||||
&aggFileSizeFromStat, &tmpMax, 1, MPI_LONG_LONG_INT, MPI_MAX, testComm ),
|
&aggFileSizeFromStat, &tmpMax, 1, MPI_LONG_LONG_INT, MPI_MAX, testComm ),
|
||||||
|
@ -523,5 +658,8 @@ HDFS_GetFileSize(IOR_param_t * param,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (param->verbose >= VERBOSE_4) {
|
||||||
|
printf("<- HDFS_GetFileSize [%llu]\n", aggFileSizeFromStat);
|
||||||
|
}
|
||||||
return ( aggFileSizeFromStat );
|
return ( aggFileSizeFromStat );
|
||||||
}
|
}
|
||||||
|
|
25
src/ior.c
25
src/ior.c
|
@ -145,6 +145,14 @@ int main(int argc, char **argv)
|
||||||
if (rank == 0 && verbose >= VERBOSE_3) {
|
if (rank == 0 && verbose >= VERBOSE_3) {
|
||||||
ShowTest(&tptr->params);
|
ShowTest(&tptr->params);
|
||||||
}
|
}
|
||||||
|
#if 0
|
||||||
|
// This is useful for trapping a running MPI process. While
|
||||||
|
// this is sleeping, run the script 'testing/hdfs/gdb.attach'
|
||||||
|
printf("\tsleeping ...");
|
||||||
|
fflush(stdout);
|
||||||
|
sleep(5);
|
||||||
|
printf("done.\n");
|
||||||
|
#endif
|
||||||
TestIoSys(tptr);
|
TestIoSys(tptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -196,10 +204,12 @@ void init_IOR_Param_t(IOR_param_t * p)
|
||||||
p->testComm = MPI_COMM_WORLD;
|
p->testComm = MPI_COMM_WORLD;
|
||||||
p->setAlignment = 1;
|
p->setAlignment = 1;
|
||||||
p->lustre_start_ost = -1;
|
p->lustre_start_ost = -1;
|
||||||
|
|
||||||
|
strncpy(p->hdfs_user, getenv("USER"), MAX_STR);
|
||||||
p->hdfs_name_node = "default";
|
p->hdfs_name_node = "default";
|
||||||
p->hdfs_name_node_port = 0; /* ??? */
|
p->hdfs_name_node_port = 0; /* ??? */
|
||||||
p->hdfs_fs = NULL;
|
p->hdfs_fs = NULL;
|
||||||
p->hdfs_replicas = 0;
|
p->hdfs_replicas = 0; /* invokes the default */
|
||||||
p->hdfs_block_size = 0;
|
p->hdfs_block_size = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -873,9 +883,10 @@ void GetPlatformName(char *platformName)
|
||||||
*/
|
*/
|
||||||
static void GetTestFileName(char *testFileName, IOR_param_t * test)
|
static void GetTestFileName(char *testFileName, IOR_param_t * test)
|
||||||
{
|
{
|
||||||
char **fileNames,
|
char **fileNames;
|
||||||
initialTestFileName[MAXPATHLEN],
|
char initialTestFileName[MAXPATHLEN];
|
||||||
testFileNameRoot[MAX_STR], tmpString[MAX_STR];
|
char testFileNameRoot[MAX_STR];
|
||||||
|
char tmpString[MAX_STR];
|
||||||
int count;
|
int count;
|
||||||
|
|
||||||
/* parse filename for multiple file systems */
|
/* parse filename for multiple file systems */
|
||||||
|
@ -1483,7 +1494,7 @@ static void ShowSetup(IOR_param_t *params)
|
||||||
printf("\tapi = %s\n", params->apiVersion);
|
printf("\tapi = %s\n", params->apiVersion);
|
||||||
printf("\ttest filename = %s\n", params->testFileName);
|
printf("\ttest filename = %s\n", params->testFileName);
|
||||||
printf("\taccess = ");
|
printf("\taccess = ");
|
||||||
printf(params->filePerProc ? "file-per-process" : "single-shared-file");
|
printf(params->filePerProc ? "file-per-process" : "single-shared-file");
|
||||||
if (verbose >= VERBOSE_1 && strcmp(params->api, "POSIX") != 0) {
|
if (verbose >= VERBOSE_1 && strcmp(params->api, "POSIX") != 0) {
|
||||||
printf(params->collective == FALSE ? ", independent" : ", collective");
|
printf(params->collective == FALSE ? ", independent" : ", collective");
|
||||||
}
|
}
|
||||||
|
@ -2053,6 +2064,10 @@ static void TestIoSys(IOR_test_t *test)
|
||||||
}
|
}
|
||||||
timer[2][rep] = GetTimeStamp();
|
timer[2][rep] = GetTimeStamp();
|
||||||
dataMoved = WriteOrRead(params, fd, WRITE);
|
dataMoved = WriteOrRead(params, fd, WRITE);
|
||||||
|
if (params->verbose >= VERBOSE_4) {
|
||||||
|
printf("* data moved = %llu\n", dataMoved);
|
||||||
|
fflush(stdout);
|
||||||
|
}
|
||||||
timer[3][rep] = GetTimeStamp();
|
timer[3][rep] = GetTimeStamp();
|
||||||
if (params->intraTestBarriers)
|
if (params->intraTestBarriers)
|
||||||
MPI_CHECK(MPI_Barrier(testComm),
|
MPI_CHECK(MPI_Barrier(testComm),
|
||||||
|
|
|
@ -120,6 +120,7 @@ typedef struct
|
||||||
IOR_offset_t setAlignment; /* alignment in bytes */
|
IOR_offset_t setAlignment; /* alignment in bytes */
|
||||||
|
|
||||||
/* HDFS variables */
|
/* HDFS variables */
|
||||||
|
char hdfs_user[MAX_STR]; /* copied from ENV, for now */
|
||||||
const char* hdfs_name_node;
|
const char* hdfs_name_node;
|
||||||
tPort hdfs_name_node_port; /* (uint16_t) */
|
tPort hdfs_name_node_port; /* (uint16_t) */
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue