/* * get_hdfs_location_from_filespace * * Get hdfs location from pg_filespace_entry * The returned path needs to be pfreed by the caller. */ void get_hdfs_location_from_filespace(char** path) { Assert(NULL != path); Oid dtsoid = get_database_dts(MyDatabaseId); GetFilespacePathForTablespace(dtsoid, path); Assert(NULL != *path); Assert(strlen(*path) < FilespaceLocationBlankPaddedWithNullTermLen); elog(DEBUG2, "found hdfs location is %s", *path); }
static bool PersistentDatabase_CheckTablespaceScanTupleCallback( ItemPointer persistentTid, int64 persistentSerialNum, Datum *values) { DbDirNode dbDirNode; PersistentFileSysState state; int32 reserved; TransactionId parentXid; int64 serialNum; ItemPointerData previousFreeTid; bool sharedStorage; GpPersistentDatabaseNode_GetValues( values, &dbDirNode.tablespace, &dbDirNode.database, &state, &reserved, &parentXid, &serialNum, &previousFreeTid, &sharedStorage); if (state == PersistentFileSysState_Created && dbDirNode.tablespace == persistentDatabaseCheckTablespace) { /* * Database can access different tablespaces, which will be recorded in * this relation. Skip the tablespaces which are not recored in * pg_database relation. */ if (MyDatabaseTableSpace == persistentDatabaseCheckTablespace || get_database_dts(MyDatabaseId) == persistentDatabaseCheckTablespace) persistentDatabaseCheckTablespaceUseCount++; } return true; }
void executormgr_setup_env(MemoryContext ctx) { MemoryContext old; if (executor_cache.init) return; executor_cache.pool = poolmgr_create_pool(ctx, (PoolMgrCleanCallback) executormgr_destory); executor_cache.entrydb_pool = poolmgr_create_pool(ctx, (PoolMgrCleanCallback) executormgr_destory); executor_cache.ctx = ctx; executor_cache.init = true; /* TODO: Setup dispatcher information. But should remove in the future. */ old = MemoryContextSwitchTo(ctx); MyProcPort->dboid = MyDatabaseId; MyProcPort->dbdtsoid = get_database_dts(MyDatabaseId); MyProcPort->bootstrap_user = get_rolname(BOOTSTRAP_SUPERUSERID); MyProcPort->encoding = GetDatabaseEncoding(); MemoryContextSwitchTo(old); }
/* * calculate total size of tablespace */ static int64 calculate_tablespace_size(Oid tblspcOid) { char tblspcPath[MAXPGPATH]; char pathname[MAXPGPATH]; int64 totalsize = 0; DIR *dirdesc; struct dirent *direntry; AclResult aclresult; /* * User must have CREATE privilege for target tablespace, either * explicitly granted or implicitly because it is default for current * database. */ if (tblspcOid != MyDatabaseTableSpace && tblspcOid != get_database_dts(MyDatabaseId)) { aclresult = pg_tablespace_aclcheck(tblspcOid, GetUserId(), ACL_CREATE); if (aclresult != ACLCHECK_OK) aclcheck_error(aclresult, ACL_KIND_TABLESPACE, get_tablespace_name(tblspcOid)); } if (tblspcOid == DEFAULTTABLESPACE_OID) snprintf(tblspcPath, MAXPGPATH, "base"); else if (tblspcOid == GLOBALTABLESPACE_OID) snprintf(tblspcPath, MAXPGPATH, "global"); else snprintf(tblspcPath, MAXPGPATH, "pg_tblspc/%u", tblspcOid); dirdesc = AllocateDir(tblspcPath); if (!dirdesc) ereport(ERROR, (errcode_for_file_access(), errmsg("could not open tablespace directory \"%s\": %m", tblspcPath))); while ((direntry = ReadDir(dirdesc, tblspcPath)) != NULL) { struct stat fst; if (strcmp(direntry->d_name, ".") == 0 || strcmp(direntry->d_name, "..") == 0) continue; snprintf(pathname, MAXPGPATH, "%s/%s", tblspcPath, direntry->d_name); if (stat(pathname, &fst) < 0) { if (errno == ENOENT) continue; else ereport(ERROR, (errcode_for_file_access(), errmsg("could not stat file \"%s\": %m", pathname))); } if (S_ISDIR(fst.st_mode)) totalsize += db_dir_size(pathname); totalsize += fst.st_size; } FreeDir(dirdesc); return totalsize; }