Project

General

Profile

Actions

Bug #15717

closed

getListenAddr behavior with multiple instances on same host

Added by Peter Amstutz about 5 years ago. Updated almost 5 years ago.

Status:
Resolved
Priority:
Normal
Assigned To:
Category:
-
Target version:
Story points:
-
Release relationship:
Auto

Description

Setting the listen port for keepstore through the legacy config doesn't seem to work, it seems like instead it randomly picks a port to bind to from InternalURLs and if it is in use, it fails, and (in arvbox) it goes into a crash-restart loop until it happens to picks the 2nd port that's still available

Looking at the code, it just adds the legacy "Listen" to InternalURLs, for that to do the right thing, the keepstore InternalURLs needs to be empty to start with.

In getListenAddr in lib/service/cmd.go, it has different behavior depending on the text of the error, in particular, if there are two ports defined for the same host (eg 25107 and 25108) it will fail if it can't bind 25107 and not try to bind 25108.

        } else if strings.Contains(err.Error(), "cannot assign requested address") {
            continue
        } else if strings.Contains(err.Error(), "address already in use") {
            return url, err

Subtasks 1 (0 open1 closed)

Task #15718: Review 15717-svc-select-portResolvedPeter Amstutz10/15/2019Actions
Actions #1

Updated by Peter Amstutz about 5 years ago

  • Description updated (diff)
Actions #2

Updated by Tom Clegg about 5 years ago

Seems like it would work if "address already in use" didn't fail right away, but instead
  • continue trying other entries
  • if all entries fail, and one or more errors were "address already in use", then report "address(es) already in use" as the error -- rather than the generic "not configured for this host" error that's returned by the current code when all fail but none were handled by that "address already in use" condition
Actions #3

Updated by Peter Amstutz about 5 years ago

  • Assigned To set to Peter Amstutz
Actions #5

Updated by Tom Clegg about 5 years ago

LGTM, thanks.

(nit -- you can call len() and append to a nil slice, so "var errors []string" might be a better habit for slices that might not need to be allocated at all)

Actions #6

Updated by Peter Amstutz about 5 years ago

  • Status changed from New to Resolved
Actions #7

Updated by Peter Amstutz almost 5 years ago

  • Release set to 22
Actions

Also available in: Atom PDF