Skip to content

Commit

Permalink
Merged in DW-1272 (pull request #337)
Browse files Browse the repository at this point in the history
DW-1272 add retry_count when SocketConnect fail
  • Loading branch information
sungeun-kim committed Nov 11, 2016
2 parents 432863d + a8ce647 commit d4dfc64
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 31 deletions.
42 changes: 12 additions & 30 deletions build/drbd.install4j
Original file line number Diff line number Diff line change
Expand Up @@ -911,47 +911,29 @@ return WinRegistry.setValue(RegistryRoot.HKEY_LOCAL_MACHINE
</serializedBean>
<condition />
</action>
<action name="Install drbdService" id="2016" customizedId="" beanClass="com.install4j.runtime.beans.actions.misc.RunExecutableAction" enabled="true" commentSet="false" comment="" actionElevationType="elevated" rollbackBarrier="false" multiExec="false" failureStrategy="2" errorMessage="Failed to install service">
<action name="" id="2153" customizedId="" beanClass="com.install4j.runtime.beans.actions.services.InstallServiceAction" enabled="true" commentSet="false" comment="" actionElevationType="elevated" rollbackBarrier="false" multiExec="false" failureStrategy="2" errorMessage="Failed to install service">
<serializedBean>
<java class="java.beans.XMLDecoder">
<object class="com.install4j.runtime.beans.actions.misc.RunExecutableAction">
<void property="arguments">
<array class="java.lang.String" length="1">
<void index="0">
<string>/i</string>
</void>
</array>
<object class="com.install4j.runtime.beans.actions.services.InstallServiceAction">
<void property="description">
<string>Windows DRBD service</string>
</void>
<void property="executable">
<object class="java.io.File">
<string>bin/drbdService.exe</string>
</object>
</void>
<void property="workingDirectory">
<object class="java.io.File">
<string>bin</string>
</object>
</void>
</object>
</java>
</serializedBean>
<condition />
</action>
<action name="" id="2017" customizedId="" beanClass="com.install4j.runtime.beans.actions.registry.SetRegistryValueAction" enabled="true" commentSet="false" comment="" actionElevationType="elevated" rollbackBarrier="false" multiExec="false" failureStrategy="1" errorMessage="">
<serializedBean>
<java class="java.beans.XMLDecoder">
<object class="com.install4j.runtime.beans.actions.registry.SetRegistryValueAction">
<void property="keyName">
<string>SYSTEM\CurrentControlSet\Services\drbdService</string>
<void property="interactive">
<boolean>true</boolean>
</void>
<void property="registryRoot">
<object class="com.install4j.api.windows.RegistryRoot" field="HKEY_LOCAL_MACHINE" />
<void property="launcherId">
<null />
</void>
<void property="value">
<string>nsi</string>
<void property="serviceName">
<string>drbdService</string>
</void>
<void property="valueName">
<string>DependOnService</string>
<void property="windowsDependencies">
<string>Tcpip</string>
</void>
</object>
</java>
Expand Down
29 changes: 28 additions & 1 deletion drbd/drbd_transport_tcp.c
Original file line number Diff line number Diff line change
Expand Up @@ -639,9 +639,13 @@ static int dtt_try_connect(struct dtt_path *path, struct socket **ret_socket)

if (!NT_SUCCESS(status)) {
err = status;
WDRBD_TRACE("dtt_try_connect: SocketConnect fail status:%x\n",status);
WDRBD_INFO("dtt_try_connect: SocketConnect fail status:%x\n",status);
switch (status) {
case STATUS_CONNECTION_REFUSED: err = -ECONNREFUSED; break;
#ifdef _WIN32
// DW-1272 : retry SocketConnect if STATUS_INVALID_ADDRESS_COMPONENT
case STATUS_INVALID_ADDRESS_COMPONENT: break;
#endif
case STATUS_INVALID_DEVICE_STATE: err = -EAGAIN; break;
case STATUS_NETWORK_UNREACHABLE: err = -ENETUNREACH; break;
case STATUS_HOST_UNREACHABLE: err = -EHOSTUNREACH; break;
Expand Down Expand Up @@ -790,7 +794,12 @@ static int dtt_try_connect(struct dtt_path *path, struct socket **ret_socket)
if (err < 0) {
if (socket)
sock_release(socket);
#ifdef _WIN32
// DW-1272 : retry SocketConnect if STATUS_INVALID_ADDRESS_COMPONENT
if (err != -EAGAIN && err != STATUS_INVALID_ADDRESS_COMPONENT)
#else
if (err != -EAGAIN)
#endif
tr_err(transport, "%s failed, err = %d\n", what, err);
} else {
*ret_socket = socket;
Expand Down Expand Up @@ -1673,11 +1682,29 @@ static int dtt_connect(struct drbd_transport *transport)
#endif
mutex_unlock(&tcp_transport->paths_mutex);

#ifdef _WIN32
// DW-1272 : retry SocketConnect if STATUS_INVALID_ADDRESS_COMPONENT
int retry_count =0;
#endif

do {
struct socket *s = NULL;

err = dtt_try_connect(connect_to_path, &s);
#ifdef _WIN32
// DW-1272 : retry SocketConnect if STATUS_INVALID_ADDRESS_COMPONENT
if (err == STATUS_INVALID_ADDRESS_COMPONENT)
{
if (++retry_count > 3)
{
goto out;
}
tr_err(transport, "create-connect retry (%d)\n", retry_count);
}
else if (err < 0 && err != -EAGAIN)
#else
if (err < 0 && err != -EAGAIN)
#endif
goto out;

if (s) {
Expand Down

0 comments on commit d4dfc64

Please sign in to comment.