diff --git a/bin/democratic-csi b/bin/democratic-csi index df46a27..afb4b34 100755 --- a/bin/democratic-csi +++ b/bin/democratic-csi @@ -141,6 +141,7 @@ const cache = new LRU({ max: 500 }); const { logger } = require("../src/utils/logger"); const { GrpcError } = require("../src/utils/grpc"); const GeneralUtils = require("../src/utils/general"); +const uuidv4 = require("uuid").v4; if (args.logLevel) { logger.level = args.logLevel; @@ -201,17 +202,25 @@ async function requestHandlerProxy(call, callback, serviceMethodName) { } } + const requestReadableID = GeneralUtils.loggerIdFromRequest(call, serviceMethodName); + const requestUUID = uuidv4(); + const callContext = { + logger: logger.child({ + method: serviceMethodName, + requestId: requestReadableID, + uuid: requestUUID, + }), + }; try { - logger.info( - "new request - driver: %s method: %s call: %j", + callContext.logger.info( + "new request: driver: %s, call: %j", driver.constructor.name, - serviceMethodName, cleansedCall ); const lockKeys = GeneralUtils.lockKeysFromRequest(call, serviceMethodName); if (lockKeys.length > 0) { - logger.debug("operation lock keys: %j", lockKeys); + callContext.logger.debug("operation lock keys: %j", lockKeys); // check locks lockKeys.forEach((key) => { if (operationLock.has(key)) { @@ -239,13 +248,13 @@ async function requestHandlerProxy(call, callback, serviceMethodName) { let response; let responseError; try { - // aquire locks + // acquire locks if (lockKeys.length > 0) { lockKeys.forEach((key) => { operationLock.add(key); }); } - response = await driver[serviceMethodName](call); + response = await driver[serviceMethodName](callContext, call); } catch (e) { responseError = e; } finally { @@ -269,10 +278,8 @@ async function requestHandlerProxy(call, callback, serviceMethodName) { ); } - logger.info( - "new response - driver: %s method: %s response: %j", - driver.constructor.name, - serviceMethodName, + callContext.logger.info( + "new response: %j", response ); @@ -288,10 +295,8 @@ async function requestHandlerProxy(call, callback, serviceMethodName) { message = stringify(e); } - logger.error( - "handler error - driver: %s method: %s error: %s", - driver.constructor.name, - serviceMethodName, + callContext.logger.error( + "handler error: %s", message ); diff --git a/src/driver/controller-client-common/index.js b/src/driver/controller-client-common/index.js index b2a7272..8621447 100644 --- a/src/driver/controller-client-common/index.js +++ b/src/driver/controller-client-common/index.js @@ -156,7 +156,7 @@ class ControllerClientCommonDriver extends CsiBaseDriver { return access_modes; } - assertCapabilities(capabilities) { + assertCapabilities(callContext, capabilities) { const driver = this; this.ctx.logger.verbose("validating capabilities: %j", capabilities); @@ -548,7 +548,7 @@ class ControllerClientCommonDriver extends CsiBaseDriver { * * @param {*} call */ - async CreateVolume(call) { + async CreateVolume(callContext, call) { const driver = this; const config_key = driver.getConfigKey(); @@ -560,7 +560,7 @@ class ControllerClientCommonDriver extends CsiBaseDriver { call.request.volume_capabilities && call.request.volume_capabilities.length > 0 ) { - const result = this.assertCapabilities(call.request.volume_capabilities); + const result = this.assertCapabilities(callContext, call.request.volume_capabilities); if (result.valid !== true) { throw new GrpcError(grpc.status.INVALID_ARGUMENT, result.message); } @@ -840,7 +840,7 @@ class ControllerClientCommonDriver extends CsiBaseDriver { * * @param {*} call */ - async DeleteVolume(call) { + async DeleteVolume(callContext, call) { const driver = this; const volume_id = call.request.volume_id; @@ -873,7 +873,7 @@ class ControllerClientCommonDriver extends CsiBaseDriver { * * @param {*} call */ - async ControllerExpandVolume(call) { + async ControllerExpandVolume(callContext, call) { throw new GrpcError( grpc.status.UNIMPLEMENTED, `operation not supported by driver` @@ -885,7 +885,7 @@ class ControllerClientCommonDriver extends CsiBaseDriver { * * @param {*} call */ - async GetCapacity(call) { + async GetCapacity(callContext, call) { const driver = this; if ( @@ -902,7 +902,7 @@ class ControllerClientCommonDriver extends CsiBaseDriver { } if (call.request.volume_capabilities) { - const result = this.assertCapabilities(call.request.volume_capabilities); + const result = this.assertCapabilities(callContext, call.request.volume_capabilities); if (result.valid !== true) { return { available_capacity: 0 }; @@ -925,7 +925,7 @@ class ControllerClientCommonDriver extends CsiBaseDriver { * * @param {*} call */ - async ListVolumes(call) { + async ListVolumes(callContext, call) { throw new GrpcError( grpc.status.UNIMPLEMENTED, `operation not supported by driver` @@ -936,7 +936,7 @@ class ControllerClientCommonDriver extends CsiBaseDriver { * * @param {*} call */ - async ListSnapshots(call) { + async ListSnapshots(callContext, call) { throw new GrpcError( grpc.status.UNIMPLEMENTED, `operation not supported by driver` @@ -963,7 +963,7 @@ class ControllerClientCommonDriver extends CsiBaseDriver { * * @param {*} call */ - async CreateSnapshot(call) { + async CreateSnapshot(callContext, call) { const driver = this; const config_key = driver.getConfigKey(); @@ -1305,7 +1305,7 @@ class ControllerClientCommonDriver extends CsiBaseDriver { * * @param {*} call */ - async DeleteSnapshot(call) { + async DeleteSnapshot(callContext, call) { const driver = this; let snapshot_id = call.request.snapshot_id; @@ -1393,7 +1393,7 @@ class ControllerClientCommonDriver extends CsiBaseDriver { * * @param {*} call */ - async ValidateVolumeCapabilities(call) { + async ValidateVolumeCapabilities(callContext, call) { const driver = this; const volume_id = call.request.volume_id; @@ -1414,7 +1414,7 @@ class ControllerClientCommonDriver extends CsiBaseDriver { ); } - const result = this.assertCapabilities(call.request.volume_capabilities); + const result = this.assertCapabilities(callContext, call.request.volume_capabilities); if (result.valid !== true) { return { message: result.message }; diff --git a/src/driver/controller-local-hostpath/index.js b/src/driver/controller-local-hostpath/index.js index a838cac..225b147 100644 --- a/src/driver/controller-local-hostpath/index.js +++ b/src/driver/controller-local-hostpath/index.js @@ -78,7 +78,7 @@ class ControllerLocalHostpathDriver extends ControllerClientCommonDriver { * @param {*} call * @returns */ - async NodeGetInfo(call) { + async NodeGetInfo(callContext, call) { const response = await super.NodeGetInfo(...arguments); response.accessible_topology = { segments: { diff --git a/src/driver/controller-objectivefs/index.js b/src/driver/controller-objectivefs/index.js index 121570f..d30e4e7 100644 --- a/src/driver/controller-objectivefs/index.js +++ b/src/driver/controller-objectivefs/index.js @@ -159,7 +159,7 @@ class ControllerObjectiveFSDriver extends CsiBaseDriver { return ["fuse.objectivefs", "objectivefs"]; } - assertCapabilities(capabilities) { + assertCapabilities(callContext, capabilities) { const driver = this; this.ctx.logger.verbose("validating capabilities: %j", capabilities); @@ -270,7 +270,7 @@ class ControllerObjectiveFSDriver extends CsiBaseDriver { * * @param {*} call */ - async Probe(call) { + async Probe(callContext, call) { const driver = this; const pool = _.get(driver.options, "objectivefs.pool"); const object_store = _.get(driver.options, "objectivefs.env.OBJECTSTORE"); @@ -301,7 +301,7 @@ class ControllerObjectiveFSDriver extends CsiBaseDriver { * * @param {*} call */ - async CreateVolume(call) { + async CreateVolume(callContext, call) { const driver = this; const ofsClient = await driver.getObjectiveFSClient(); const pool = _.get(driver.options, "objectivefs.pool"); @@ -347,7 +347,7 @@ class ControllerObjectiveFSDriver extends CsiBaseDriver { call.request.volume_capabilities && call.request.volume_capabilities.length > 0 ) { - const result = this.assertCapabilities(call.request.volume_capabilities); + const result = this.assertCapabilities(callContext, call.request.volume_capabilities); if (result.valid !== true) { throw new GrpcError(grpc.status.INVALID_ARGUMENT, result.message); } @@ -446,7 +446,7 @@ class ControllerObjectiveFSDriver extends CsiBaseDriver { * * @param {*} call */ - async DeleteVolume(call) { + async DeleteVolume(callContext, call) { const driver = this; const ofsClient = await driver.getObjectiveFSClient(); const pool = _.get(driver.options, "objectivefs.pool"); @@ -481,7 +481,7 @@ class ControllerObjectiveFSDriver extends CsiBaseDriver { * * @param {*} call */ - async ControllerExpandVolume(call) { + async ControllerExpandVolume(callContext, call) { throw new GrpcError( grpc.status.UNIMPLEMENTED, `operation not supported by driver` @@ -493,7 +493,7 @@ class ControllerObjectiveFSDriver extends CsiBaseDriver { * * @param {*} call */ - async GetCapacity(call) { + async GetCapacity(callContext, call) { throw new GrpcError( grpc.status.UNIMPLEMENTED, `operation not supported by driver` @@ -506,7 +506,7 @@ class ControllerObjectiveFSDriver extends CsiBaseDriver { * * @param {*} call */ - async ListVolumes(call) { + async ListVolumes(callContext, call) { const driver = this; const ofsClient = await driver.getObjectiveFSClient(); const pool = _.get(driver.options, "objectivefs.pool"); @@ -588,7 +588,7 @@ class ControllerObjectiveFSDriver extends CsiBaseDriver { * * @param {*} call */ - async ListSnapshots(call) { + async ListSnapshots(callContext, call) { throw new GrpcError( grpc.status.UNIMPLEMENTED, `operation not supported by driver` @@ -599,7 +599,7 @@ class ControllerObjectiveFSDriver extends CsiBaseDriver { * * @param {*} call */ - async CreateSnapshot(call) { + async CreateSnapshot(callContext, call) { throw new GrpcError( grpc.status.UNIMPLEMENTED, `operation not supported by driver` @@ -612,7 +612,7 @@ class ControllerObjectiveFSDriver extends CsiBaseDriver { * * @param {*} call */ - async DeleteSnapshot(call) { + async DeleteSnapshot(callContext, call) { throw new GrpcError( grpc.status.UNIMPLEMENTED, `operation not supported by driver` @@ -623,7 +623,7 @@ class ControllerObjectiveFSDriver extends CsiBaseDriver { * * @param {*} call */ - async ValidateVolumeCapabilities(call) { + async ValidateVolumeCapabilities(callContext, call) { const driver = this; const ofsClient = await driver.getObjectiveFSClient(); const pool = _.get(driver.options, "objectivefs.pool"); @@ -651,7 +651,7 @@ class ControllerObjectiveFSDriver extends CsiBaseDriver { throw new GrpcError(grpc.status.INVALID_ARGUMENT, `missing capabilities`); } - const result = this.assertCapabilities(call.request.volume_capabilities); + const result = this.assertCapabilities(callContext, call.request.volume_capabilities); if (result.valid !== true) { return { message: result.message }; diff --git a/src/driver/controller-synology/index.js b/src/driver/controller-synology/index.js index 29e6817..36fda12 100644 --- a/src/driver/controller-synology/index.js +++ b/src/driver/controller-synology/index.js @@ -250,7 +250,7 @@ class ControllerSynologyDriver extends CsiBaseDriver { return access_modes; } - assertCapabilities(capabilities) { + assertCapabilities(callContext, capabilities) { const driverResourceType = this.getDriverResourceType(); this.ctx.logger.verbose("validating capabilities: %j", capabilities); @@ -319,7 +319,7 @@ class ControllerSynologyDriver extends CsiBaseDriver { * * @param {*} call */ - async CreateVolume(call) { + async CreateVolume(callContext, call) { const driver = this; const httpClient = await driver.getHttpClient(); @@ -330,7 +330,7 @@ class ControllerSynologyDriver extends CsiBaseDriver { call.request.volume_capabilities && call.request.volume_capabilities.length > 0 ) { - const result = this.assertCapabilities(call.request.volume_capabilities); + const result = this.assertCapabilities(callContext, call.request.volume_capabilities); if (result.valid !== true) { throw new GrpcError(grpc.status.INVALID_ARGUMENT, result.message); } @@ -677,7 +677,7 @@ class ControllerSynologyDriver extends CsiBaseDriver { * * @param {*} call */ - async DeleteVolume(call) { + async DeleteVolume(callContext, call) { const driver = this; const httpClient = await driver.getHttpClient(); @@ -785,7 +785,7 @@ class ControllerSynologyDriver extends CsiBaseDriver { * * @param {*} call */ - async ControllerExpandVolume(call) { + async ControllerExpandVolume(callContext, call) { const driver = this; const httpClient = await driver.getHttpClient(); @@ -877,7 +877,7 @@ class ControllerSynologyDriver extends CsiBaseDriver { * * @param {*} call */ - async GetCapacity(call) { + async GetCapacity(callContext, call) { const driver = this; const httpClient = await driver.getHttpClient(); const location = driver.getLocation(); @@ -890,7 +890,7 @@ class ControllerSynologyDriver extends CsiBaseDriver { } if (call.request.volume_capabilities) { - const result = this.assertCapabilities(call.request.volume_capabilities); + const result = this.assertCapabilities(callContext, call.request.volume_capabilities); if (result.valid !== true) { return { available_capacity: 0 }; @@ -907,7 +907,7 @@ class ControllerSynologyDriver extends CsiBaseDriver { * * @param {*} call */ - async ListVolumes(call) { + async ListVolumes(callContext, call) { throw new GrpcError( grpc.status.UNIMPLEMENTED, `operation not supported by driver` @@ -918,7 +918,7 @@ class ControllerSynologyDriver extends CsiBaseDriver { * * @param {*} call */ - async ListSnapshots(call) { + async ListSnapshots(callContext, call) { throw new GrpcError( grpc.status.UNIMPLEMENTED, `operation not supported by driver` @@ -929,7 +929,7 @@ class ControllerSynologyDriver extends CsiBaseDriver { * * @param {*} call */ - async CreateSnapshot(call) { + async CreateSnapshot(callContext, call) { const driver = this; const httpClient = await driver.getHttpClient(); @@ -1049,7 +1049,7 @@ class ControllerSynologyDriver extends CsiBaseDriver { * * @param {*} call */ - async DeleteSnapshot(call) { + async DeleteSnapshot(callContext, call) { // throw new GrpcError( // grpc.status.UNIMPLEMENTED, // `operation not supported by driver` @@ -1100,7 +1100,7 @@ class ControllerSynologyDriver extends CsiBaseDriver { * * @param {*} call */ - async ValidateVolumeCapabilities(call) { + async ValidateVolumeCapabilities(callContext, call) { const driver = this; const httpClient = await driver.getHttpClient(); @@ -1150,7 +1150,7 @@ class ControllerSynologyDriver extends CsiBaseDriver { break; } - const result = this.assertCapabilities(call.request.volume_capabilities); + const result = this.assertCapabilities(callContext, call.request.volume_capabilities); if (result.valid !== true) { return { message: result.message }; } diff --git a/src/driver/controller-zfs-local/index.js b/src/driver/controller-zfs-local/index.js index c117543..302915d 100644 --- a/src/driver/controller-zfs-local/index.js +++ b/src/driver/controller-zfs-local/index.js @@ -227,7 +227,7 @@ class ControllerZfsLocalDriver extends ControllerZfsBaseDriver { * @param {*} call * @returns */ - async NodeGetInfo(call) { + async NodeGetInfo(callContext, call) { const response = await super.NodeGetInfo(...arguments); response.accessible_topology = { segments: { diff --git a/src/driver/controller-zfs/index.js b/src/driver/controller-zfs/index.js index 7017c12..b79b371 100644 --- a/src/driver/controller-zfs/index.js +++ b/src/driver/controller-zfs/index.js @@ -252,7 +252,7 @@ class ControllerZfsBaseDriver extends CsiBaseDriver { return access_modes; } - assertCapabilities(capabilities) { + assertCapabilities(callContext, capabilities) { const driverZfsResourceType = this.getDriverZfsResourceType(); this.ctx.logger.verbose("validating capabilities: %j", capabilities); @@ -564,7 +564,7 @@ class ControllerZfsBaseDriver extends CsiBaseDriver { * * @param {*} call */ - async Probe(call) { + async Probe(callContext, call) { const driver = this; if (driver.ctx.args.csiMode.includes("controller")) { @@ -636,7 +636,7 @@ class ControllerZfsBaseDriver extends CsiBaseDriver { * * @param {*} call */ - async CreateVolume(call) { + async CreateVolume(callContext, call) { const driver = this; const driverZfsResourceType = this.getDriverZfsResourceType(); const execClient = this.getExecClient(); @@ -718,7 +718,7 @@ class ControllerZfsBaseDriver extends CsiBaseDriver { call.request.volume_capabilities && call.request.volume_capabilities.length > 0 ) { - const result = this.assertCapabilities(call.request.volume_capabilities); + const result = this.assertCapabilities(callContext, call.request.volume_capabilities); if (result.valid !== true) { throw new GrpcError(grpc.status.INVALID_ARGUMENT, result.message); } @@ -1339,7 +1339,7 @@ class ControllerZfsBaseDriver extends CsiBaseDriver { * * @param {*} call */ - async DeleteVolume(call) { + async DeleteVolume(callContext, call) { const driver = this; const zb = await this.getZetabyte(); const driverOptions = driver.getMergedDriverOptions([]); @@ -1508,7 +1508,7 @@ class ControllerZfsBaseDriver extends CsiBaseDriver { * * @param {*} call */ - async ControllerExpandVolume(call) { + async ControllerExpandVolume(callContext, call) { const driver = this; const driverZfsResourceType = this.getDriverZfsResourceType(); const zb = await this.getZetabyte(); @@ -1628,7 +1628,7 @@ class ControllerZfsBaseDriver extends CsiBaseDriver { * * @param {*} call */ - async GetCapacity(call) { + async GetCapacity(callContext, call) { const driver = this; const zb = await this.getZetabyte(); const driverOptions = driver.getMergedDriverOptions([]); @@ -1643,7 +1643,7 @@ class ControllerZfsBaseDriver extends CsiBaseDriver { } if (call.request.volume_capabilities) { - const result = this.assertCapabilities(call.request.volume_capabilities); + const result = this.assertCapabilities(callContext, call.request.volume_capabilities); if (result.valid !== true) { return { available_capacity: 0 }; @@ -1678,7 +1678,7 @@ class ControllerZfsBaseDriver extends CsiBaseDriver { * * @param {*} call */ - async ControllerGetVolume(call) { + async ControllerGetVolume(callContext, call) { const driver = this; const driverZfsResourceType = this.getDriverZfsResourceType(); const zb = await this.getZetabyte(); @@ -1760,7 +1760,7 @@ class ControllerZfsBaseDriver extends CsiBaseDriver { * * @param {*} call */ - async ListVolumes(call) { + async ListVolumes(callContext, call) { const driver = this; const driverZfsResourceType = this.getDriverZfsResourceType(); const zb = await this.getZetabyte(); @@ -1901,7 +1901,7 @@ class ControllerZfsBaseDriver extends CsiBaseDriver { * * @param {*} call */ - async ListSnapshots(call) { + async ListSnapshots(callContext, call) { const driver = this; const driverZfsResourceType = this.getDriverZfsResourceType(); const zb = await this.getZetabyte(); @@ -2156,7 +2156,7 @@ class ControllerZfsBaseDriver extends CsiBaseDriver { * * @param {*} call */ - async CreateSnapshot(call) { + async CreateSnapshot(callContext, call) { const driver = this; const driverZfsResourceType = this.getDriverZfsResourceType(); const zb = await this.getZetabyte(); @@ -2478,7 +2478,7 @@ class ControllerZfsBaseDriver extends CsiBaseDriver { * * @param {*} call */ - async DeleteSnapshot(call) { + async DeleteSnapshot(callContext, call) { const driver = this; const zb = await this.getZetabyte(); const driverOptions = driver.getMergedDriverOptions([]); @@ -2550,7 +2550,7 @@ class ControllerZfsBaseDriver extends CsiBaseDriver { * * @param {*} call */ - async ValidateVolumeCapabilities(call) { + async ValidateVolumeCapabilities(callContext, call) { const driver = this; const zb = await this.getZetabyte(); const driverOptions = driver.getMergedDriverOptions([]); @@ -2589,7 +2589,7 @@ class ControllerZfsBaseDriver extends CsiBaseDriver { } } - const result = this.assertCapabilities(call.request.volume_capabilities); + const result = this.assertCapabilities(callContext, call.request.volume_capabilities); if (result.valid !== true) { return { message: result.message }; diff --git a/src/driver/freenas/api.js b/src/driver/freenas/api.js index 7eb94a3..19faeb6 100644 --- a/src/driver/freenas/api.js +++ b/src/driver/freenas/api.js @@ -2484,7 +2484,7 @@ class FreeNASApiDriver extends CsiBaseDriver { return access_modes; } - assertCapabilities(capabilities) { + assertCapabilities(callContext, capabilities) { const driverZfsResourceType = this.getDriverZfsResourceType(); this.ctx.logger.verbose("validating capabilities: %j", capabilities); @@ -2579,7 +2579,7 @@ class FreeNASApiDriver extends CsiBaseDriver { * * @param {*} call */ - async Probe(call) { + async Probe(callContext, call) { const driver = this; const httpApiClient = await driver.getTrueNASHttpApiClient(); @@ -2630,7 +2630,7 @@ class FreeNASApiDriver extends CsiBaseDriver { * * @param {*} call */ - async CreateVolume(call) { + async CreateVolume(callContext, call) { const driver = this; const driverZfsResourceType = this.getDriverZfsResourceType(); const httpApiClient = await this.getTrueNASHttpApiClient(); @@ -2656,7 +2656,7 @@ class FreeNASApiDriver extends CsiBaseDriver { call.request.volume_capabilities && call.request.volume_capabilities.length > 0 ) { - const result = this.assertCapabilities(call.request.volume_capabilities); + const result = this.assertCapabilities(callContext, call.request.volume_capabilities); if (result.valid !== true) { throw new GrpcError(grpc.status.INVALID_ARGUMENT, result.message); } @@ -3402,7 +3402,7 @@ class FreeNASApiDriver extends CsiBaseDriver { * * @param {*} call */ - async DeleteVolume(call) { + async DeleteVolume(callContext, call) { const driver = this; const httpApiClient = await this.getTrueNASHttpApiClient(); const zb = await this.getZetabyte(); @@ -3581,7 +3581,7 @@ class FreeNASApiDriver extends CsiBaseDriver { * * @param {*} call */ - async ControllerExpandVolume(call) { + async ControllerExpandVolume(callContext, call) { const driver = this; const driverZfsResourceType = this.getDriverZfsResourceType(); const httpApiClient = await this.getTrueNASHttpApiClient(); @@ -3702,7 +3702,7 @@ class FreeNASApiDriver extends CsiBaseDriver { * * @param {*} call */ - async GetCapacity(call) { + async GetCapacity(callContext, call) { const driver = this; const httpApiClient = await this.getTrueNASHttpApiClient(); const zb = await this.getZetabyte(); @@ -3717,7 +3717,7 @@ class FreeNASApiDriver extends CsiBaseDriver { } if (call.request.volume_capabilities) { - const result = this.assertCapabilities(call.request.volume_capabilities); + const result = this.assertCapabilities(callContext, call.request.volume_capabilities); if (result.valid !== true) { return { available_capacity: 0 }; @@ -3750,7 +3750,7 @@ class FreeNASApiDriver extends CsiBaseDriver { * * @param {*} call */ - async ControllerGetVolume(call) { + async ControllerGetVolume(callContext, call) { const driver = this; const driverZfsResourceType = this.getDriverZfsResourceType(); const httpApiClient = await this.getTrueNASHttpApiClient(); @@ -3824,7 +3824,7 @@ class FreeNASApiDriver extends CsiBaseDriver { * * @param {*} call */ - async ListVolumes(call) { + async ListVolumes(callContext, call) { const driver = this; const driverZfsResourceType = this.getDriverZfsResourceType(); const httpClient = await this.getHttpClient(); @@ -3966,7 +3966,7 @@ class FreeNASApiDriver extends CsiBaseDriver { * * @param {*} call */ - async ListSnapshots(call) { + async ListSnapshots(callContext, call) { const driver = this; const driverZfsResourceType = this.getDriverZfsResourceType(); const httpClient = await this.getHttpClient(); @@ -4400,7 +4400,7 @@ class FreeNASApiDriver extends CsiBaseDriver { * * @param {*} call */ - async CreateSnapshot(call) { + async CreateSnapshot(callContext, call) { const driver = this; const driverZfsResourceType = this.getDriverZfsResourceType(); const httpClient = await this.getHttpClient(); @@ -4811,7 +4811,7 @@ class FreeNASApiDriver extends CsiBaseDriver { * * @param {*} call */ - async DeleteSnapshot(call) { + async DeleteSnapshot(callContext, call) { const driver = this; const httpApiClient = await this.getTrueNASHttpApiClient(); const zb = await this.getZetabyte(); @@ -4891,7 +4891,7 @@ class FreeNASApiDriver extends CsiBaseDriver { * * @param {*} call */ - async ValidateVolumeCapabilities(call) { + async ValidateVolumeCapabilities(callContext, call) { const driver = this; const httpApiClient = await this.getTrueNASHttpApiClient(); @@ -4928,7 +4928,7 @@ class FreeNASApiDriver extends CsiBaseDriver { } } - const result = this.assertCapabilities(capabilities); + const result = this.assertCapabilities(callContext, capabilities); if (result.valid !== true) { return { message: result.message }; diff --git a/src/driver/freenas/ssh.js b/src/driver/freenas/ssh.js index 37a593f..34b3c80 100644 --- a/src/driver/freenas/ssh.js +++ b/src/driver/freenas/ssh.js @@ -45,7 +45,7 @@ class FreeNASSshDriver extends ControllerZfsBaseDriver { * * @param {*} call */ - async Probe(call) { + async Probe(callContext, call) { const driver = this; if (driver.ctx.args.csiMode.includes("controller")) { diff --git a/src/driver/index.js b/src/driver/index.js index 664e34c..d07b4df 100644 --- a/src/driver/index.js +++ b/src/driver/index.js @@ -550,14 +550,14 @@ class CsiBaseDriver { return volume_id; } - async GetPluginInfo(call) { + async GetPluginInfo(callContext, call) { return { name: this.ctx.args.csiName, vendor_version: this.ctx.args.version, }; } - async GetPluginCapabilities(call) { + async GetPluginCapabilities(callContext, call) { let capabilities; const response = { capabilities: [], @@ -642,11 +642,11 @@ class CsiBaseDriver { return response; } - async Probe(call) { + async Probe(callContext, call) { return { ready: { value: true } }; } - async ControllerGetCapabilities(call) { + async ControllerGetCapabilities(callContext, call) { let capabilities; const response = { capabilities: [], @@ -689,7 +689,7 @@ class CsiBaseDriver { return response; } - async NodeGetCapabilities(call) { + async NodeGetCapabilities(callContext, call) { let capabilities; const response = { capabilities: [], @@ -714,7 +714,7 @@ class CsiBaseDriver { return response; } - async NodeGetInfo(call) { + async NodeGetInfo(callContext, call) { return { node_id: process.env.CSI_NODE_ID || os.hostname(), max_volumes_per_node: 0, @@ -731,7 +731,7 @@ class CsiBaseDriver { * * @param {*} call */ - async NodeStageVolume(call) { + async NodeStageVolume(callContext, call) { const driver = this; const mount = driver.getDefaultMountInstance(); const filesystem = driver.getDefaultFilesystemInstance(); @@ -820,7 +820,7 @@ class CsiBaseDriver { } if (call.request.volume_context.provisioner_driver == "node-manual") { - result = await this.assertCapabilities([capability], node_attach_driver); + result = await this.assertCapabilities(callContext, [capability], node_attach_driver); if (!result.valid) { throw new GrpcError( grpc.status.INVALID_ARGUMENT, @@ -828,7 +828,7 @@ class CsiBaseDriver { ); } } else { - result = await this.assertCapabilities([capability]); + result = await this.assertCapabilities(callContext, [capability]); if (!result.valid) { throw new GrpcError( grpc.status.INVALID_ARGUMENT, @@ -2517,7 +2517,7 @@ class CsiBaseDriver { * * @param {*} call */ - async NodeUnstageVolume(call) { + async NodeUnstageVolume(callContext, call) { const driver = this; const mount = driver.getDefaultMountInstance(); const filesystem = driver.getDefaultFilesystemInstance(); @@ -3049,7 +3049,7 @@ class CsiBaseDriver { return {}; } - async NodePublishVolume(call) { + async NodePublishVolume(callContext, call) { const driver = this; const mount = driver.getDefaultMountInstance(); const filesystem = driver.getDefaultFilesystemInstance(); @@ -3370,7 +3370,7 @@ class CsiBaseDriver { } } - async NodeUnpublishVolume(call) { + async NodeUnpublishVolume(callContext, call) { const driver = this; const mount = driver.getDefaultMountInstance(); const filesystem = driver.getDefaultFilesystemInstance(); @@ -3538,7 +3538,7 @@ class CsiBaseDriver { return {}; } - async NodeGetVolumeStats(call) { + async NodeGetVolumeStats(callContext, call) { const driver = this; const mount = driver.getDefaultMountInstance(); const filesystem = driver.getDefaultFilesystemInstance(); @@ -3776,7 +3776,7 @@ class CsiBaseDriver { * * @param {*} call */ - async NodeExpandVolume(call) { + async NodeExpandVolume(callContext, call) { const driver = this; const mount = driver.getDefaultMountInstance(); const filesystem = driver.getDefaultFilesystemInstance(); diff --git a/src/driver/node-manual/index.js b/src/driver/node-manual/index.js index c55915e..61cccd1 100644 --- a/src/driver/node-manual/index.js +++ b/src/driver/node-manual/index.js @@ -100,7 +100,7 @@ class NodeManualDriver extends CsiBaseDriver { } } - assertCapabilities(capabilities, node_attach_driver) { + assertCapabilities(callContext, capabilities, node_attach_driver) { this.ctx.logger.verbose("validating capabilities: %j", capabilities); let message = null; @@ -242,7 +242,7 @@ class NodeManualDriver extends CsiBaseDriver { * * @param {*} call */ - async CreateVolume(call) { + async CreateVolume(callContext, call) { throw new GrpcError( grpc.status.UNIMPLEMENTED, `operation not supported by driver` @@ -253,7 +253,7 @@ class NodeManualDriver extends CsiBaseDriver { * * @param {*} call */ - async DeleteVolume(call) { + async DeleteVolume(callContext, call) { throw new GrpcError( grpc.status.UNIMPLEMENTED, `operation not supported by driver` @@ -264,7 +264,7 @@ class NodeManualDriver extends CsiBaseDriver { * * @param {*} call */ - async ControllerExpandVolume(call) { + async ControllerExpandVolume(callContext, call) { throw new GrpcError( grpc.status.UNIMPLEMENTED, `operation not supported by driver` @@ -275,7 +275,7 @@ class NodeManualDriver extends CsiBaseDriver { * * @param {*} call */ - async GetCapacity(call) { + async GetCapacity(callContext, call) { throw new GrpcError( grpc.status.UNIMPLEMENTED, `operation not supported by driver` @@ -286,7 +286,7 @@ class NodeManualDriver extends CsiBaseDriver { * * @param {*} call */ - async ListVolumes(call) { + async ListVolumes(callContext, call) { throw new GrpcError( grpc.status.UNIMPLEMENTED, `operation not supported by driver` @@ -297,7 +297,7 @@ class NodeManualDriver extends CsiBaseDriver { * * @param {*} call */ - async ListSnapshots(call) { + async ListSnapshots(callContext, call) { throw new GrpcError( grpc.status.UNIMPLEMENTED, `operation not supported by driver` @@ -308,7 +308,7 @@ class NodeManualDriver extends CsiBaseDriver { * * @param {*} call */ - async CreateSnapshot(call) { + async CreateSnapshot(callContext, call) { throw new GrpcError( grpc.status.UNIMPLEMENTED, `operation not supported by driver` @@ -319,7 +319,7 @@ class NodeManualDriver extends CsiBaseDriver { * * @param {*} call */ - async DeleteSnapshot(call) { + async DeleteSnapshot(callContext, call) { throw new GrpcError( grpc.status.UNIMPLEMENTED, `operation not supported by driver` @@ -330,7 +330,7 @@ class NodeManualDriver extends CsiBaseDriver { * * @param {*} call */ - async ValidateVolumeCapabilities(call) { + async ValidateVolumeCapabilities(callContext, call) { throw new GrpcError( grpc.status.UNIMPLEMENTED, `operation not supported by driver` diff --git a/src/driver/zfs-local-ephemeral-inline/index.js b/src/driver/zfs-local-ephemeral-inline/index.js index d231d32..e74d23e 100644 --- a/src/driver/zfs-local-ephemeral-inline/index.js +++ b/src/driver/zfs-local-ephemeral-inline/index.js @@ -180,7 +180,7 @@ class ZfsLocalEphemeralInlineDriver extends CsiBaseDriver { return datasetParentName; } - assertCapabilities(capabilities) { + assertCapabilities(callContext, capabilities) { // hard code this for now const driverZfsResourceType = "filesystem"; this.ctx.logger.verbose("validating capabilities: %j", capabilities); @@ -287,7 +287,7 @@ class ZfsLocalEphemeralInlineDriver extends CsiBaseDriver { * * @param {*} call */ - async NodePublishVolume(call) { + async NodePublishVolume(callContext, call) { const driver = this; const zb = this.getZetabyte(); @@ -324,7 +324,7 @@ class ZfsLocalEphemeralInlineDriver extends CsiBaseDriver { } if (capability) { - const result = this.assertCapabilities([capability]); + const result = this.assertCapabilities(callContext, [capability]); if (result.valid !== true) { throw new GrpcError(grpc.status.INVALID_ARGUMENT, result.message); @@ -401,7 +401,7 @@ class ZfsLocalEphemeralInlineDriver extends CsiBaseDriver { * * @param {*} call */ - async NodeUnpublishVolume(call) { + async NodeUnpublishVolume(callContext, call) { const zb = this.getZetabyte(); const filesystem = new Filesystem(); let result; @@ -469,7 +469,7 @@ class ZfsLocalEphemeralInlineDriver extends CsiBaseDriver { * * @param {*} call */ - async GetCapacity(call) { + async GetCapacity(callContext, call) { const driver = this; const zb = this.getZetabyte(); @@ -483,7 +483,7 @@ class ZfsLocalEphemeralInlineDriver extends CsiBaseDriver { } if (call.request.volume_capabilities) { - const result = this.assertCapabilities(call.request.volume_capabilities); + const result = this.assertCapabilities(callContext, call.request.volume_capabilities); if (result.valid !== true) { return { available_capacity: 0 }; @@ -503,9 +503,9 @@ class ZfsLocalEphemeralInlineDriver extends CsiBaseDriver { * * @param {*} call */ - async ValidateVolumeCapabilities(call) { + async ValidateVolumeCapabilities(callContext, call) { const driver = this; - const result = this.assertCapabilities(call.request.volume_capabilities); + const result = this.assertCapabilities(callContext, call.request.volume_capabilities); if (result.valid !== true) { return { message: result.message }; diff --git a/src/utils/general.js b/src/utils/general.js index 1657a67..44e19b7 100644 --- a/src/utils/general.js +++ b/src/utils/general.js @@ -92,6 +92,49 @@ function lockKeysFromRequest(call, serviceMethodName) { } } +function loggerIdFromRequest(call, serviceMethodName) { + switch (serviceMethodName) { + // controller + case "CreateVolume": + return call.request.name; + case "DeleteVolume": + case "ControllerExpandVolume": + case "ControllerPublishVolume": + case "ControllerUnpublishVolume": + case "ValidateVolumeCapabilities": + case "ControllerGetVolume": + case "ControllerModifyVolume": + return call.request.volume_id; + case "CreateSnapshot": + return call.request.source_volume_id; + case "DeleteSnapshot": + return call.request.snapshot_id; + case "ListVolumes": + case "GetCapacity": + case "ControllerGetCapabilities": + case "ListSnapshots": + return ''; + + // node + case "NodeStageVolume": + case "NodeUnstageVolume": + case "NodePublishVolume": + case "NodeUnpublishVolume": + case "NodeGetVolumeStats": + case "NodeExpandVolume": + return call.request.volume_id; + + case "NodeGetCapabilities": + case "NodeGetInfo": + case "GetPluginInfo": + case "GetPluginCapabilities": + case "Probe": + return ''; + default: + throw `loggerIdFromRequest: unknown method: ${serviceMethodName}`; + } +} + function getLargestNumber() { let number; for (let i = 0; i < arguments.length; i++) { @@ -291,6 +334,7 @@ module.exports.crc32 = crc32; module.exports.crc16 = crc16; module.exports.crc8 = crc8; module.exports.lockKeysFromRequest = lockKeysFromRequest; +module.exports.loggerIdFromRequest = loggerIdFromRequest; module.exports.getLargestNumber = getLargestNumber; module.exports.stringify = stringify; module.exports.before_string = before_string;