Tcl Library Source Code

Check-in [64d9695c87]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Added a new mechanism to designate certain parties in the cluster to act as repositories. When a DISCOVERY request goes out that parrot back everything they have seen, not just its own services
Timelines: family | ancestors | descendants | both | odie
Files: files | file ages | folders
SHA1: 64d9695c879c3185889d48ecc02b262934bec84f
User & Date: hypnotoad 2015-09-24 00:34:26
Context
2015-09-24
19:29
Moved the tool.shed manifest to the new customary spot. Added a makefile directive to rebuild the makefile check-in: f8dd6bc0eb user: hypnotoad tags: odie
00:34
Added a new mechanism to designate certain parties in the cluster to act as repositories. When a DISCOVERY request goes out that parrot back everything they have seen, not just its own services check-in: 64d9695c87 user: hypnotoad tags: odie
2015-09-21
17:17
Redesign of the free_port system for nns_cluster. check-in: b79e07e239 user: hypnotoad tags: odie
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to modules/nns/nns_cluster.tcl.

94
95
96
97
98
99
100

101
102
103
104
105
106
107
  variable discovery_group
  set broadcast_sock [udp_open $discovery_port reuse]
  fconfigure $broadcast_sock -buffering none -blocking 0 \
    -mcastadd $discovery_group \
    -remote [list $discovery_group $discovery_port]
  fileevent $broadcast_sock readable [list [namespace current]::UDPPacket $broadcast_sock]
  ::cron::every cluster_heartbeat 30 ::cluster::heartbeat

  return $broadcast_sock
}

###
# topic: 2a33c825920162b0791e2cdae62e6164
###
proc ::cluster::UDPPacket sock {







>







94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
  variable discovery_group
  set broadcast_sock [udp_open $discovery_port reuse]
  fconfigure $broadcast_sock -buffering none -blocking 0 \
    -mcastadd $discovery_group \
    -remote [list $discovery_group $discovery_port]
  fileevent $broadcast_sock readable [list [namespace current]::UDPPacket $broadcast_sock]
  ::cron::every cluster_heartbeat 30 ::cluster::heartbeat
  
  return $broadcast_sock
}

###
# topic: 2a33c825920162b0791e2cdae62e6164
###
proc ::cluster::UDPPacket sock {
145
146
147
148
149
150
151

152








153
154
155
156
157
158
159
      set serviceurl [lindex $messageinfo 0]
      set serviceinfo [lindex $messageinfo 1]
      dict set serviceinfo ipaddr [lindex $peer 0]
      Service_Add $serviceurl $serviceinfo
      set ::cluster::ping_recv($serviceurl) [clock seconds]
    }
    DISCOVERY {

      ::cluster::heartbeat








    }
    LOG {
      set serviceurl [lindex $messageinfo 0]
      set serviceinfo [lindex $messageinfo 1]
      Service_Log $serviceurl $serviceinfo
    }
    ?WHOIS {







>

>
>
>
>
>
>
>
>







146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
      set serviceurl [lindex $messageinfo 0]
      set serviceinfo [lindex $messageinfo 1]
      dict set serviceinfo ipaddr [lindex $peer 0]
      Service_Add $serviceurl $serviceinfo
      set ::cluster::ping_recv($serviceurl) [clock seconds]
    }
    DISCOVERY {
      variable config
      ::cluster::heartbeat
      if {$config(local_registry)==1} {
        variable ptpdata
        # A local registry barfs back all data that is sees
        set now [clock seconds]
        foreach {url info} [array get ptpdata] {
          broadcast ~SERVICE $url $info 
        }
      }
    }
    LOG {
      set serviceurl [lindex $messageinfo 0]
      set serviceinfo [lindex $messageinfo 1]
      Service_Log $serviceurl $serviceinfo
    }
    ?WHOIS {
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270

proc ::cluster::get_free_port {{startport 50000}} {
  ::cluster::listen
  ::cluster::broadcast DISCOVERY
  after 10000 {set ::cluster::recv_message 0}
  # Wait for a pingback or timeout
  vwait ::cluster::recv_message
  update
  
  set macid [::cluster::macid]
  set port $startport
  set conflict 1
  while {$conflict} {
    set conflict 0
    set port [::nettool::find_port $port]







|







266
267
268
269
270
271
272
273
274
275
276
277
278
279
280

proc ::cluster::get_free_port {{startport 50000}} {
  ::cluster::listen
  ::cluster::broadcast DISCOVERY
  after 10000 {set ::cluster::recv_message 0}
  # Wait for a pingback or timeout
  vwait ::cluster::recv_message
  cluster::sleep 2000
  
  set macid [::cluster::macid]
  set port $startport
  set conflict 1
  while {$conflict} {
    set conflict 0
    set port [::nettool::find_port $port]
453
454
455
456
457
458
459

460
461
462
463
464
465
466
###
namespace eval ::cluster {
  # Number of seconds to "remember" data
  variable config
  array set config {
    debug 0
    discovery_ttl 300

  }
  variable cache {}
  variable broadcast_sock {}
  variable cache_maxage 500
  variable discovery_port 38573
  # Currently an unassigned group in the
  # Local Network Control Block (224.0.0/24)







>







463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
###
namespace eval ::cluster {
  # Number of seconds to "remember" data
  variable config
  array set config {
    debug 0
    discovery_ttl 300
    local_registry 0
  }
  variable cache {}
  variable broadcast_sock {}
  variable cache_maxage 500
  variable discovery_port 38573
  # Currently an unassigned group in the
  # Local Network Control Block (224.0.0/24)