@@ -341,59 +341,13 @@ func (h *htrun) regNetHandlers(networkHandlers []networkHandler) {
341341 }
342342}
343343
344- func (h * htrun ) init (config * cmn.Config ) {
345- // before newTLS() below & before intra-cluster clients
346- if config .Net .HTTP .UseHTTPS {
347- if err := certloader .Init (config .Net .HTTP .Certificate , config .Net .HTTP .CertKey , h .statsT ); err != nil {
348- cos .ExitLog (err )
349- }
350- }
351-
352- initCtrlClient (config )
353- initDataClient (config )
354-
355- load .Init ()
356-
357- tcpbuf := config .Net .L4 .SndRcvBufSize
358- if h .si .IsProxy () {
359- tcpbuf = 0
360- } else if tcpbuf == 0 {
361- tcpbuf = cmn .DefaultSndRcvBufferSize // ditto: targets use AIS default when not configured
362- }
363-
364- // PubNet enable tracing when configuration is set.
365- muxers := newMuxers (tracing .IsEnabled ())
366- g .netServ .pub = & netServer {muxers : muxers , sndRcvBufSize : tcpbuf , useIPv6 : config .Net .UseIPv6 }
367- g .netServ .control = g .netServ .pub // if not separately configured, intra-control net is public
368- if config .HostNet .UseIntraControl {
369- // TODO: for now tracing is always disabled for intra-cluster traffic.
370- // Allow enabling through config.
371- muxers = newMuxers (false /*enableTracing*/ )
372- g .netServ .control = & netServer {muxers : muxers , sndRcvBufSize : 0 , lowLatencyToS : true , useIPv6 : config .Net .UseIPv6 }
373- }
374- g .netServ .data = g .netServ .control // if not configured, intra-data net is intra-control
375- if config .HostNet .UseIntraData {
376- // TODO: for now tracing is always disabled for intra-data traffic.
377- // Allow enabling through config.
378- muxers = newMuxers (false /*enableTracing*/ )
379- g .netServ .data = & netServer {muxers : muxers , sndRcvBufSize : tcpbuf , useIPv6 : config .Net .UseIPv6 }
380- }
381-
382- h .owner .smap = newSmapOwner (config )
383- h .owner .rmd = newRMDOwner (config )
384- h .owner .rmd .load ()
385- h .owner .csk .init ()
386-
387- h .gmm = memsys .PageMM ()
388- h .gmm .RegWithHK ()
389- h .smm = memsys .ByteMM ()
390- h .smm .RegWithHK ()
391-
392- hk .Reg ("rate-limit" + hk .NameSuffix , h .ratelim .housekeep , hk .PruneRateLimiters )
393- }
394-
395- // steps 1 thru 4
396- func (h * htrun ) initSnode (config * cmn.Config ) {
344+ // resolve node networking and initialize Snode (steps 1 thru 4); in particular:
345+ // - pick addresses
346+ // - decide effective IP family
347+ // - initialize effective networking state (do not mutate config)
348+ // - init net servers/muxers
349+ // see also: docs/networking.md
350+ func (h * htrun ) initPhase1 (config * cmn.Config ) {
397351 var (
398352 pubAddr meta.NetInfo
399353 pubExtra []meta.NetInfo
@@ -530,6 +484,30 @@ func (h *htrun) initSnode(config *cmn.Config) {
530484 copy (h .si .PubExtra , pubExtra )
531485 nlog .Infof ("%s (multihome) access: %v and %v" , cmn .NetPublic , pubAddr , h .si .PubExtra )
532486 }
487+
488+ tcpbuf := config .Net .L4 .SndRcvBufSize
489+ if h .si .IsProxy () {
490+ tcpbuf = 0
491+ } else if tcpbuf == 0 {
492+ tcpbuf = cmn .DefaultSndRcvBufferSize // ditto: targets use AIS default when not configured
493+ }
494+
495+ // pub-net first
496+ muxers := newMuxers (tracing .IsEnabled ())
497+ g .netServ .pub = & netServer {muxers : muxers , sndRcvBufSize : tcpbuf , useIPv6 : useIPv6 }
498+
499+ // intra-control and intra-data
500+ // note: separate config and isolated bandwidth - strongly recommended
501+ g .netServ .control = g .netServ .pub
502+ if config .HostNet .UseIntraControl {
503+ muxers = newMuxers (false /*enableTracing*/ )
504+ g .netServ .control = & netServer {muxers : muxers , sndRcvBufSize : 0 , lowLatencyToS : true , useIPv6 : useIPv6 }
505+ }
506+ g .netServ .data = g .netServ .control // if not configured, intra-data net is intra-control
507+ if config .HostNet .UseIntraData {
508+ muxers = newMuxers (false /*enableTracing*/ )
509+ g .netServ .data = & netServer {muxers : muxers , sndRcvBufSize : tcpbuf , useIPv6 : useIPv6 }
510+ }
533511}
534512
535513func mustDiffer (ip1 meta.NetInfo , port1 int , use1 bool , ip2 meta.NetInfo , port2 int , use2 bool , tag string ) {
@@ -541,6 +519,39 @@ func mustDiffer(ip1 meta.NetInfo, port1 int, use1 bool, ip2 meta.NetInfo, port2
541519 }
542520}
543521
522+ // phase2 init (part of the Run()):
523+ // - TLS/clients
524+ // - metadata owners (singletons)
525+ // - cluster key
526+ // - housekeep: memsys; rate-limit-prune
527+ func (h * htrun ) initPhase2 (config * cmn.Config ) {
528+ debug .Assert (g .netServ .control != nil && g .netServ .data != nil && g .netServ .pub != nil ) // (phase1 above)
529+
530+ // before newTLS() below & before intra-cluster clients
531+ if config .Net .HTTP .UseHTTPS {
532+ if err := certloader .Init (config .Net .HTTP .Certificate , config .Net .HTTP .CertKey , h .statsT ); err != nil {
533+ cos .ExitLog (err )
534+ }
535+ }
536+
537+ initCtrlClient (config , g .netServ .control .useIPv6 )
538+ initDataClient (config , g .netServ .data .useIPv6 )
539+
540+ load .Init ()
541+
542+ h .owner .smap = newSmapOwner (config )
543+ h .owner .rmd = newRMDOwner (config )
544+ h .owner .rmd .load ()
545+ h .owner .csk .init ()
546+
547+ h .gmm = memsys .PageMM ()
548+ h .gmm .RegWithHK ()
549+ h .smm = memsys .ByteMM ()
550+ h .smm .RegWithHK ()
551+
552+ hk .Reg ("rate-limit" + hk .NameSuffix , h .ratelim .housekeep , hk .PruneRateLimiters )
553+ }
554+
544555// at startup, check this Snode vs locally stored Smap replica (NOTE: some errors are FATAL)
545556func (h * htrun ) loadSmap () (smap * smapX , reliable bool ) {
546557 smap = newSmap ()
0 commit comments