On 07/14/2010 12:56 PM, Boaz Harrosh wrote:
On 07/14/2010 08:23 PM, Mike Christie wrote:
On 07/14/2010 10:49 AM, Boaz Harrosh wrote:
On 07/14/2010 05:52 PM, Mike Christie wrote:
On 07/14/2010 05:30 AM, HIMANSHU wrote:
How can we know error status of iscsiadm commands like
discovery,login,logout.
I think,all of them directly returns corresponding success/failure
messages.
so mostly I can just fire the commands without checking any error
codes after it?
If you run
iscsiadm -m node .... -l
iscsiadm should return a error code like other programs. If you wanted
to see it you could do
iscsiadm -m node .... -l
echo $?
Speaking of which. When I want to completely run from a script file
I currently have two ugly loops
after starting the iscsi service and before I can iscsiadm I must do:
start_iscsi_intiator()
{
if ! service $ISCSI status; then
service iscsi start ;
until cat /sys/class/iscsi_transport/tcp/handle 2>/dev/null ; do
sleep 1;
done
fi
}
Effectively wait for the /sys/class/iscsi_transport/tcp/handle file to appear
And after login but before I can actually start banging on my scsi device I
need:
login_iscsi()
{
echo login into: $IP_ISCSI
$iscsiadm -m discovery -t sendtargets -p $IP_ISCSI --login;
until ls $DEV_ISCSI 2>/dev/null; do sleep 1; done
}
Effectively wait for the device to appear. This one is particularly nasty
because it assumes that I know what $DEV_ISCSI will be.
Would we want to add a --wait-server and --wait switches to iscsiadm
--wait-server - will wait for the iscsi-kernel-modules and iscsid server
to stabilize. (until some timeout)
Not sure. When service iscsi start is run, it will eventually load the
modules. The script does not return until modprobe has returned and
modprobe does not return until the kernel module module_init function
and those do not return until it has run the sysfs functions that create
the files you are waiting on. So are you saying that once module_init
has completed the files are not accessible right away?
OK, so I just got lucky here probably, since I'm doing a sleep 1;
so the first iteration fails then a 1 sec wait is good enough. I think
what happens is that the iscsid server is not yet ready for communication
with iscsiadm. I'll remove the wait and run with debug-on see what actually
fails.
See open-iscsi/usr/iscsid_req.c:iscsid_connect(). Sometimes we will try
again. Sometimes we will not. We used to always retry, but in some
release we added that check for ECONNREFUSED, and then we added the
stuff to start iscsid. Maybe we need to change that test.
--wait - with a --login will wait (with timeout) until the loggedin
device is available.
For this one, the --login command returns once the scsi kernel scan is
completed (the tools just do write(/sys/class/scsi_host/hostX/scan). So
the kernel inquiries and report luns and scsi_device struct stuff is
done, and the kernel has sent hotplug events to notify userspace. So the
problem you are hitting is that things like udev have not handled the
hotplug event and created the /dev links right?
We could just add a wait in iscsiadm or the iscsi init scripts for this.
It would basically do
iscsiadm -m ... --login
iscsiadm -m session -P 3 | grep some_string_to_get_devices
wait on each device
Yes something like this, which is what I do. Perhaps just give
an example script with the recommended way to do it. (or add the --wait)
init scripts with auto-login work fine. It's only if I run the complete
lot from script as above .ie
start_iscsi_intiator
login_iscsi
mount_dev
Then I need these two waits above. otherwise it fails.
It's not urgent just if you can think about it a bit
The scripting is what will take me some time :) (I am not good at it).
--
You received this message because you are subscribed to the Google Groups
"open-iscsi" group.
To post to this group, send email to open-is...@googlegroups.com.
To unsubscribe from this group, send email to
open-iscsi+unsubscr...@googlegroups.com.
For more options, visit this group at
http://groups.google.com/group/open-iscsi?hl=en.