@@ -1131,38 +1131,68 @@ private Answer backupSnapshotFromManagedStorage(final CopyCommand cmd) {
11311131 }
11321132
11331133 /**
1134- * Rescans an existing iSCSI session to discover newly mapped LUNs.
1135- * If no session exists yet, performs a login first.
1134+ * Ensures an iSCSI session is active and rescanned so that the target LUN is visible.
1135+ * Handles three scenarios:
1136+ * 1. Session already exists → rescan to discover newly mapped LUNs
1137+ * 2. Node record exists but no session → login, then rescan
1138+ * 3. No node record at all → discover target, create node record, login
11361139 */
11371140 private void rescanIscsiSession (String iqn , String host , String port ) {
1138- // First try to rescan the existing session
1141+ // Step 1: Try rescan — works if session already exists
11391142 Script rescanCmd = new Script (true , "iscsiadm" , 0 , logger );
11401143 rescanCmd .add ("-m" , "node" );
11411144 rescanCmd .add ("-T" , iqn );
11421145 rescanCmd .add ("-p" , host + ":" + port );
11431146 rescanCmd .add ("--rescan" );
11441147
11451148 String result = rescanCmd .execute ();
1149+ if (result == null ) {
1150+ logger .info ("rescanIscsiSession: Successfully rescanned existing session for {}@{}:{}" , iqn , host , port );
1151+ return ;
1152+ }
1153+
1154+ logger .info ("rescanIscsiSession: Rescan failed ({}), attempting full connect for {}@{}:{}" , result , iqn , host , port );
1155+
1156+ // Step 2: Create node record (iscsiadm -m node -T <iqn> -p <host>:<port> -o new)
1157+ // This is required before login can succeed.
1158+ Script nodeCreateCmd = new Script (true , "iscsiadm" , 0 , logger );
1159+ nodeCreateCmd .add ("-m" , "node" );
1160+ nodeCreateCmd .add ("-T" , iqn );
1161+ nodeCreateCmd .add ("-p" , host + ":" + port );
1162+ nodeCreateCmd .add ("-o" , "new" );
1163+ result = nodeCreateCmd .execute ();
1164+ if (result != null ) {
1165+ // "already exists" is fine
1166+ logger .info ("rescanIscsiSession: Node create result for {}@{}:{}: {}" , iqn , host , port , result );
1167+ } else {
1168+ logger .info ("rescanIscsiSession: Node record created for {}@{}:{}" , iqn , host , port );
1169+ }
1170+
1171+ // Step 3: Login
1172+ Script loginCmd = new Script (true , "iscsiadm" , 0 , logger );
1173+ loginCmd .add ("-m" , "node" );
1174+ loginCmd .add ("-T" , iqn );
1175+ loginCmd .add ("-p" , host + ":" + port );
1176+ loginCmd .add ("--login" );
1177+ result = loginCmd .execute ();
1178+ if (result != null ) {
1179+ // "already present" is fine
1180+ logger .info ("rescanIscsiSession: Login result for {}@{}:{}: {}" , iqn , host , port , result );
1181+ } else {
1182+ logger .info ("rescanIscsiSession: Successfully logged in to {}@{}:{}" , iqn , host , port );
1183+ }
1184+
1185+ // Step 4: Rescan again to discover newly mapped LUNs
1186+ rescanCmd = new Script (true , "iscsiadm" , 0 , logger );
1187+ rescanCmd .add ("-m" , "node" );
1188+ rescanCmd .add ("-T" , iqn );
1189+ rescanCmd .add ("-p" , host + ":" + port );
1190+ rescanCmd .add ("--rescan" );
1191+ result = rescanCmd .execute ();
11461192 if (result != null ) {
1147- // Rescan failed — session may not exist. Try login first, then rescan.
1148- logger .info ("rescanIscsiSession: Rescan failed ({}), attempting login + rescan for {}@{}:{}" , result , iqn , host , port );
1149-
1150- Script loginCmd = new Script (true , "iscsiadm" , 0 , logger );
1151- loginCmd .add ("-m" , "node" );
1152- loginCmd .add ("-T" , iqn );
1153- loginCmd .add ("-p" , host + ":" + port );
1154- loginCmd .add ("--login" );
1155- loginCmd .execute (); // ignore result — may say "already present"
1156-
1157- // Retry rescan after login
1158- rescanCmd = new Script (true , "iscsiadm" , 0 , logger );
1159- rescanCmd .add ("-m" , "node" );
1160- rescanCmd .add ("-T" , iqn );
1161- rescanCmd .add ("-p" , host + ":" + port );
1162- rescanCmd .add ("--rescan" );
1163- rescanCmd .execute (); // best effort
1193+ logger .warn ("rescanIscsiSession: Post-login rescan failed for {}@{}:{}: {}" , iqn , host , port , result );
11641194 } else {
1165- logger .info ("rescanIscsiSession: Successfully rescanned session for {}@{}:{}" , iqn , host , port );
1195+ logger .info ("rescanIscsiSession: Post-login rescan succeeded for {}@{}:{}" , iqn , host , port );
11661196 }
11671197 }
11681198
0 commit comments