@tableau/taco-toolkit
Version:
Tableau Connector Toolkit
92 lines • 8.46 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.TempDataManager = void 0;
var node_fs_1 = __importDefault(require("node:fs"));
var node_path_1 = __importDefault(require("node:path"));
var eps_logger_1 = require("../logging/eps-logger");
var file_path_1 = require("../utils/file-path");
var TempDataManager = /** @class */ (function () {
function TempDataManager(epsInstanceId, tempDirRootPath) {
this.epsInstanceId = epsInstanceId;
this.tempDirRootPath = node_path_1.default.resolve(tempDirRootPath, 'tempData');
if (this.tempDirRootPath.length >= 136) {
// Duckdb read APIs can only support filepaths less than 255 characters in length.
// Fixed path after tempData for Windows is 119 characters, so tempDirRootPath length
// has to be less than 136.
throw new Error("tempDirRootPath has to be less than 136 characters in length. tempDirRootPath: ".concat(this.tempDirRootPath));
}
}
// path example: <tempDirRootPath>/tempData/eps-489f4343-1e73-4a22-b047-f0063969c28a/ext-b8ced5be-a728-4a71-98b4-6674cb064498/f-098f6bcd4621d373cade4e832627b4f6
TempDataManager.prototype.getTempDataFilePath = function (extractorId, filename) {
var tempDataDir = getExtractorDirPath(this.tempDirRootPath, this.epsInstanceId, extractorId);
var filepath = node_path_1.default.join(tempDataDir, "f-".concat((0, file_path_1.getMD5Hash)(filename)));
// Duckdb read APIs can only support filepaths less than 255 characters in length.
if (filepath.length >= 255) {
throw new Error("Temporary data filepath has to be less than 255 characters in length. tempDataFilePath: ".concat(filepath));
}
return filepath;
};
/**
* Retrieves the directory path containing partitioned data stored as multiple files
* associated with a specific table. e.g. parquet data
*
* @returns The directory path for the partitioned data of the specified table and extractor.
* example: <tempDirRootPath>/tempData/eps-489f4343-1e73-4a22-b047-f0063969c28a/ext-b8ced5be-a728-4a71-98b4-6674cb064498/f-098f6bcd4621d373cade4e832627b4f6/
*/
TempDataManager.prototype.getTempDataDirPath = function (extractorId, dirName) {
var tempDataDir = getExtractorDirPath(this.tempDirRootPath, this.epsInstanceId, extractorId);
var dirPath = node_path_1.default.join(tempDataDir, "f-".concat((0, file_path_1.getMD5Hash)(dirName)));
return dirPath;
};
TempDataManager.prototype.createTempDataDirIfNotExists = function (extractorId) {
// Adding eps- and extractor- prefixes to make sure that
// directory creation is successful on Windows OS.
var tempDataDir = getExtractorDirPath(this.tempDirRootPath, this.epsInstanceId, extractorId);
// create temp log dir if it does not exist
if (!node_fs_1.default.existsSync(tempDataDir)) {
node_fs_1.default.mkdirSync(tempDataDir, { recursive: true });
eps_logger_1.Logger.info("Temporary data directory created: ".concat(tempDataDir));
}
return tempDataDir;
};
TempDataManager.prototype.deleteExtractorTempDataDir = function (extractorId) {
var tempDataDir = getExtractorDirPath(this.tempDirRootPath, this.epsInstanceId, extractorId);
eps_logger_1.Logger.info("Clean up Extractor temporary data directory if exists: ".concat(tempDataDir));
removeDirIfExists(tempDataDir);
};
TempDataManager.prototype.deleteEpsTempDataDir = function () {
var dirPath = getEPSInstanceDirPath(this.tempDirRootPath, this.epsInstanceId);
eps_logger_1.Logger.info("Clean up EPS temporary data directory if exists: ".concat(dirPath));
removeDirIfExists(dirPath);
};
return TempDataManager;
}());
exports.TempDataManager = TempDataManager;
/**
* Delete the given directory if it exists.
*
* It was observed that ENOTEMPTY error is intermittently thrown on Windows,
* so the function will do 3 retries for deletion.
*/
function removeDirIfExists(dirPath) {
if (node_fs_1.default.existsSync(dirPath)) {
node_fs_1.default.rmSync(dirPath, {
recursive: true,
force: true,
maxRetries: 3,
retryDelay: 500,
});
eps_logger_1.Logger.info("Removed: ".concat(dirPath));
}
}
function getExtractorDirPath(tempDirRootPath, epsInstanceId, extractorId) {
var epsInstanceDirPath = getEPSInstanceDirPath(tempDirRootPath, epsInstanceId);
return node_path_1.default.join(epsInstanceDirPath, "ext-".concat(extractorId));
}
function getEPSInstanceDirPath(tempDirRootPath, epsInstanceId) {
return node_path_1.default.join(tempDirRootPath, "eps-".concat(epsInstanceId));
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcC1kYXRhLW1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZXBzL21vZHVsZXMvdGVtcC1kYXRhLW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsb0RBQXdCO0FBQ3hCLHdEQUE0QjtBQUM1QixvREFBOEM7QUFDOUMsZ0RBQStDO0FBRS9DO0lBSUUseUJBQVksYUFBcUIsRUFBRSxlQUF1QjtRQUN4RCxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQTtRQUNsQyxJQUFJLENBQUMsZUFBZSxHQUFHLG1CQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxVQUFVLENBQUMsQ0FBQTtRQUNoRSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxJQUFJLEdBQUcsRUFBRTtZQUN0QyxrRkFBa0Y7WUFDbEYscUZBQXFGO1lBQ3JGLDJCQUEyQjtZQUMzQixNQUFNLElBQUksS0FBSyxDQUNiLHlGQUFrRixJQUFJLENBQUMsZUFBZSxDQUFFLENBQ3pHLENBQUE7U0FDRjtJQUNILENBQUM7SUFFRCxnS0FBZ0s7SUFDaEssNkNBQW1CLEdBQW5CLFVBQW9CLFdBQW1CLEVBQUUsUUFBZ0I7UUFDdkQsSUFBTSxXQUFXLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFBO1FBQzlGLElBQU0sUUFBUSxHQUFHLG1CQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxZQUFLLElBQUEsc0JBQVUsRUFBQyxRQUFRLENBQUMsQ0FBRSxDQUFDLENBQUE7UUFDcEUsa0ZBQWtGO1FBQ2xGLElBQUksUUFBUSxDQUFDLE1BQU0sSUFBSSxHQUFHLEVBQUU7WUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FDYixrR0FBMkYsUUFBUSxDQUFFLENBQ3RHLENBQUE7U0FDRjtRQUNELE9BQU8sUUFBUSxDQUFBO0lBQ2pCLENBQUM7SUFFRDs7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