diff --git a/bin/democratic-csi b/bin/democratic-csi index dbb0650..8702ae1 100755 --- a/bin/democratic-csi +++ b/bin/democratic-csi @@ -69,6 +69,8 @@ if (!args.serverSocket && !args.serverAddress && !args.serverPort) { const package = require("../package.json"); args.version = package.version; +console.log(args, options); + //const grpc = require("grpc"); const grpc = require("grpc-uds"); const protoLoader = require("@grpc/proto-loader"); @@ -96,7 +98,7 @@ const csi = protoDescriptor.csi.v1; // include available drivers const { FreeNASDriver } = require("../src/driver/freenas"); -logger.info("initializing csi driver: %s", args.driver); +logger.info("initializing csi driver: %s", options.driver); let driver; switch (options.driver) { @@ -256,7 +258,7 @@ logger.info( "starting csi server - name: %s, version: %s, driver: %s, mode: %s, csi version: %s, address: %s, socket: %s", args.csiName, args.version, - args.driver, + options.driver, args.csiMode.join(","), args.csiVersion, bindAddress, diff --git a/src/driver/index.js b/src/driver/index.js index 7872506..0881901 100644 --- a/src/driver/index.js +++ b/src/driver/index.js @@ -482,12 +482,34 @@ class CsiBaseDriver { } if (is_attached_to_session) { - await iscsi.iscsiadm.logout(session.target, [ - session.persistent_portal - ]); + let timer_start; + let timer_max; - let timer_start = Math.round(new Date().getTime() / 1000); - let timer_max = 30; + timer_start = Math.round(new Date().getTime() / 1000); + timer_max = 30; + let loggedOut = false; + while (!loggedOut) { + try { + await iscsi.iscsiadm.logout(session.target, [ + session.persistent_portal + ]); + loggedOut = true; + } catch (err) { + await sleep(2000); + let current_time = Math.round(new Date().getTime() / 1000); + if (current_time - timer_start > timer_max) { + // not throwing error for now as future invocations would not enter code path anyhow + //loggedOut = true; + throw new GrpcError( + grpc.status.UNKNOWN, + `hit timeout trying to logout of iscsi target: ${session.persistent_portal}` + ); + } + } + } + + timer_start = Math.round(new Date().getTime() / 1000); + timer_max = 30; let deletedEntry = false; while (!deletedEntry) { try { diff --git a/src/utils/iscsi.js b/src/utils/iscsi.js index 88f4eb7..722cf28 100644 --- a/src/utils/iscsi.js +++ b/src/utils/iscsi.js @@ -422,6 +422,8 @@ class ISCSI { .catch(err => { if (err.code == 21) { // no matching sessions + } else { + throw err; } }); });