Octo Cascade Bridges - here's how! FULL GUIDE

@rn1984 @Anton_Karlan

I did, just facing a minor issue here, if you can help me

@rn1984 Hey Raviv!
I’m trying to setup Cascade bridging with 2 video bridge instances, but it doesn’t seem like octo is even coming up (nothing is listening on 4096) and I was hoping you might be able to lend me a hand.
My jicofo sip file looks like this:

org.jitsi.jicofo.BRIDGE_MUC=JvbBrewery@internal.auth.<domain>
org.jitsi.jicofo.BridgeSelector.BRIDGE_SELECTION_STRATEGY=SplitBridgeSelectionStrategy 
org.jitsi.jicofo.SHORT_ID=1

And my video bridge sip files look like this:
org.jitsi.videobridge.PUBSUB_NODE=sharedStatsNode
org.jitsi.videobridge.octo.BIND_ADDRESS=10.0.X.Y
org.jitsi.videobridge.octo.PUBLIC_ADDRESS=10.0.X.Y
org.jitsi.videobridge.octo.BIND_PORT=4096
org.jitsi.videobridge.REGION=Region#

The Videobridges are definitely recognized since each meeting is load balanced (i.e all clients for meeting 1 are on jvb1 and all clients for meeting 2 are on jvb 2) , but I don’t seem to be able to get cross connections with octo to work.
Please help haha

Okay, using netcat, I can tell that UDP 4096 is up.

Can you ping from bridge to bridge?

So, pinging from JVB to JVB looks to work fine, and on each of the JVBs, I can see the OctoRelay service come up

JVB 2021-04-27 17:33:40.768 INFO: [1] OctoRelayService.<init>#72: Created Octo UDP transport
JVB 2021-04-27 17:33:40.852 INFO: [1] [relayId=10.0.100.12:4096] BridgeOctoTransport.<init>#78: Created OctoTransport

and

JVB 2021-04-27 17:33:15.134 INFO: [1] OctoRelayService.<init>#72: Created Octo UDP transport
JVB 2021-04-27 17:33:15.147 INFO: [1] [relayId=10.0.100.13:4096] BridgeOctoTransport.<init>#78: Created OctoTransport

One interesting thing I noticed is that the region and RelayID on JVB1 aren’t being read properly by jicofo.

Jicofo 2021-04-28 10:29:28.717 INFO: [24] BridgeSelector.addJvbAddress#118: Added new videobridge: Bridge[jid=jvbbrewery@internal.auth.<domain>/videobridge01, relayId=null, region=null, stress=0.00]

however, it looks like the properties are being read from JVB2

Jicofo 2021-04-28 10:29:25.676 INFO: [24] BridgeSelector.addJvbAddress#118: Added new videobridge: Bridge[jid=jvbbrewery@internal.auth.<domain>/videobridge02, relayId=10.0.100.13
:4096, region=US01, stress=0.00]

Also, just to note, I’m currently using the SplitBridgeSelectionStrategy for testing.

One last update; I’m seeing a lot of these errors in Prosody:

Apr 28 11:11:54 mod_bosh	error	Traceback[bosh]: ...jitsi-meet/prosody-plugins/mod_external_services.lua:130: attempt to perform arithmetic on a table value
stack traceback:
	...jitsi-meet/prosody-plugins/mod_external_services.lua:130: in function '?'
	/usr/lib/prosody/util/events.lua:78: in function </usr/lib/prosody/util/events.lua:74>
	(tail call): ?
	(tail call): ?
	(tail call): ?
	/usr/lib/prosody/util/events.lua:78: in function </usr/lib/prosody/util/events.lua:74>
	(tail call): ?
	/usr/lib/prosody/core/stanza_router.lua:189: in function 'core_post_stanza'
	/usr/lib/prosody/core/stanza_router.lua:137: in function </usr/lib/prosody/core/stanza_router.lua:63>
	(tail call): ?
	...
	/usr/lib/prosody/net/http/server.lua:112: in function 'process_next'
	/usr/lib/prosody/net/http/server.lua:128: in function 'success_cb'
	/usr/lib/prosody/net/http/parser.lua:177: in function 'feed'
	/usr/lib/prosody/net/http/server.lua:159: in function </usr/lib/prosody/net/http/server.lua:158>
	(tail call): ?
	/usr/lib/prosody/net/server_select.lua:879: in function </usr/lib/prosody/net/server_select.lua:861>
	[C]: in function 'xpcall'
	/usr/bin/prosody:400: in function 'loop'
	/usr/bin/prosody:431: in main chunk
	[C]: ?

I had similar issues after upgrading jitsi-meet, my octo setup stopped working.

With https://github.com/jitsi/jicofo/commit/875542fc3451ffcaace360cd5f65aedf352ad7dc a new jicofo option was added to enable octo. I had to add the following to /etc/jitsi/jicofo/jicofo.conf

jicofo {
    ...
    octo {
        enabled = true
    }
}
1 Like

omg @gdamr this was exactly the problem hahaha

@paoffworld is the issue resolved now ?

:clap: :clap: :pray: :pray:

Thanks for that input @tusharsonawane

1 Like

Hello,
I have the same problem since the last update. The SplitBridgeSelectionStrategy strategy no longer works as before.
In the same room, half of the users do not see the other half. The participants are well distributed between the two JVBs.
My configuration:
1 server with JIcofo prosody and JVB
1 server with the second JVB

However, I have activated octo in jicofo.conf.
Everything works fine except SplitBridgeSelectionStrategy
I didn’t notice anything in the logs.
Thanks for any help

jicofo/sip-communicator.properties server1

org.jitsi.jicofo.BRIDGE_MUC=JvbBrewery@internal.auth.mydomain
org.jitsi.jicofo.auth.URL=XMPP:mydomain
org.jitsi.focus.pubsub.ADDRESS=mydomain
org.jitsi.focus.STATS_PUBSUB_NODE=sharedStatsNode
#org.jitsi.jicofo.BridgeSelector.BRIDGE_SELECTION_STRATEGY=RegionBasedBridgeSelectionStrategy
org.jitsi.jicofo.BridgeSelector.BRIDGE_SELECTION_STRATEGY=SplitBridgeSelectionStrategy

jicofon.conf

jicofo {
xmpp: {
client: {
client-proxy: focus.mydomain
}
}
octo {
enabled = true
id = “1”
}
}

videobridge/jvb.conf

videobridge {
http-servers {
public {
port = 9090
}
}
websockets {
enabled = true
domain = “mydomain:443”
tls = true
}
octo {
enabled = true
id = “1”
}
}

Server2
videobridge/jvb.conf
videobridge {
http-servers {
public {
port = 9090
}
}
websockets {
server-id = “IP_LOCAL”
enabled = true
domain = “mydomain:443”
tls = true
}
octo {
enabled = true
id = “1”
}
}

It is!

Each server has to have a different ID. Also it seems like your " mark is different.

Thank you for your reply.
The mark " is correct in the files. It’s just typing my post that is not correct.
I have tried with different id’s in each jvb.conf file but without success.

Where’s your config file’s OCTO settings ?

Server 1:
videobridge/sip-communicator.properties

org.ice4j.ice.harvest.NAT_HARVESTER_LOCAL_ADDRESS=IP_LOCAL
org.ice4j.ice.harvest.NAT_HARVESTER_PUBLIC_ADDRESS=IP_PUBLIC
org.ice4j.ice.harvest.DISABLE_AWS_HARVESTER=true
org.jitsi.videobridge.DISABLE_TCP_HARVESTER=true
org.ice4j.ice.harvest.STUN_MAPPING_HARVESTER_ADDRESSES=turn.domain:443
org.jitsi.videobridge.ENABLE_STATISTICS=true
org.jitsi.videobridge.STATISTICS_TRANSPORT=pubsub
org.jitsi.videobridge.xmpp.user.shard.HOSTNAME=localhost
org.jitsi.videobridge.xmpp.user.shard.DOMAIN=auth.mydomain
org.jitsi.videobridge.xmpp.user.shard.USERNAME=jvb
org.jitsi.videobridge.xmpp.user.shard.PASSWORD=xxxxxxxx
org.jitsi.videobridge.xmpp.user.shard.MUC_JIDS=JvbBrewery@internal.auth.mydomain
org.jitsi.videobridge.xmpp.user.shard.MUC_NICKNAME=82851f4b-fd0b-438d-818b-2a40362883f6
org.jitsi.videobridge.xmpp.user.shard.DISABLE_CERTIFICATE_VERIFICATION=true
org.jitsi.videobridge.PUBSUB_SERVICE=mydomain
org.jitsi.videobridge.PUBSUB_NODE=sharedStatsNode
######### OCTO #######
#the address to bind to locally
org.jitsi.videobridge.octo.BIND_ADDRESS=IP_LOCAL
#the address to advertise (in case BIND_ADDRESS is not accessible)
org.jitsi.videobridge.octo.PUBLIC_ADDRESS=IP_PUBLIC
#the port to bind to
org.jitsi.videobridge.octo.BIND_PORT=4096
#the region that the jitsi-videobridge instance is in
org.jitsi.videobridge.REGION=region1

Server 2:
videobridge/sip-communicator.properties

org.ice4j.ice.harvest.NAT_HARVESTER_LOCAL_ADDRESS=IP_LOCAL
org.ice4j.ice.harvest.NAT_HARVESTER_PUBLIC_ADDRESS=IP_PUBLIC
org.ice4j.ice.harvest.DISABLE_AWS_HARVESTER=true
org.jitsi.videobridge.DISABLE_TCP_HARVESTER=true
org.jitsi.videobridge.SINGLE_PORT_HARVESTER_PORT=10001
org.ice4j.ice.harvest.STUN_MAPPING_HARVESTER_ADDRESSES=turn.domain:443
org.jitsi.videobridge.ENABLE_STATISTICS=true
org.jitsi.videobridge.STATISTICS_TRANSPORT=pubsub
org.jitsi.videobridge.xmpp.user.shard.HOSTNAME=mydomain
org.jitsi.videobridge.xmpp.user.shard.DOMAIN=auth.mydomain
org.jitsi.videobridge.xmpp.user.shard.USERNAME=jvb
org.jitsi.videobridge.xmpp.user.shard.PASSWORD=xxxxxxx
org.jitsi.videobridge.xmpp.user.shard.MUC_JIDS=JvbBrewery@internal.auth.mydomain
org.jitsi.videobridge.xmpp.user.shard.MUC_NICKNAME=jvb3
org.jitsi.videobridge.xmpp.user.shard.DISABLE_CERTIFICATE_VERIFICATION=true
org.jitsi.videobridge.PUBSUB_SERVICE=mydomain
org.jitsi.videobridge.PUBSUB_NODE=sharedStatsNode
######OCTO  ###################
#the address to bind to locally
org.jitsi.videobridge.octo.BIND_ADDRESS=IP_LOCAL
#the address to advertise (in case BIND_ADDRESS is not accessible)
org.jitsi.videobridge.octo.PUBLIC_ADDRESS=IP_PUBLIC
#the port to bind to
org.jitsi.videobridge.octo.BIND_PORT=4096
#the region that the jitsi-videobridge instance is in
org.jitsi.videobridge.REGION=region1

Your Jitsi meet config.js file

Thank you for your interest

config.js

testing: {
    	octo: {
        	probability: 1
   	},	
   
        // Enables experimental simulcast support on Firefox.
        enableFirefoxSimulcast: false,

        // P2P test mode disables automatic switching to P2P when there are 2
        // participants in the conference.
        p2pTestMode: false,

        // Enables the test specific features consumed by jitsi-meet-torture
        // testMode: false
	
	 // Disables the End to End Encryption feature. Useful for debugging
        // issues related to insertable streams.
        disableE2EE: true,
    },
deploymentInfo: {
        // shard: "shard1",
        // region: "europe",
        // userRegion: "asia"
	userRegion: "region1"
    }

Change this:
deploymentInfo: {
// shard: “shard1”,
// region: “europe”,
// userRegion: “asia”
userRegion: “region1”
}

To this:
deploymentInfo: {
shard: “shard1”,
region: “region1”,
userRegion: “region1”

}

See if that helps

It’s the same with this change.
Thanks.