Issue constructing new circuits in a testing network

I’m trying to create a testing tor network and I am currently running three directory authorities and one exit relay. It seems that most of the time I am unable to construct any circuit. I keep getting errors like this:

Bw Weight Failure for Case 3b: Mtotal 72.512000 != Gtotal 73.502000. G=110 M=0 E=54 D=55 T=219. Wgg=0.504500 Wgd=0.327400 Wmg=0.495500 Wme=0.000000 Wmd=0.327400 Wee=1.000000 Wed=0.345200

I’m not sure what Mtotal and Gtotal refer to, I assume it has something to do with middle relay bandwidth vs guard relay bandwidth? I also get errors like this:

[warn] No available nodes when trying to choose node. Failing.

I know that the DAs are able to vote and publish a consensus, which does list all nodes connected to this network, so I am unsure why it says there are no available nodes. This is how I have the torrc file configured for all DAs:

CookieAuthentication 1

TestingTorNetwork 1

PathsNeededToBuildCircuits 0.67
#TestingDirAuthVoteExit *
#TestingDirAuthVoteHSDir *
#V3AuthNIntervalsValid 2

#TestingDirAuthVoteGuard *
#TestingMinExitFlagThreshold 0

DataDirectory /var/lib/tor
RunAsDaemon 1
ConnLimit 60
Nickname dirauth2
ShutdownWaitLength 2
DisableDebuggerAttachment 0

Log notice file /var/log/tor/notices.log
ProtocolWarnings 1
SafeLogging 0
LogTimeGranularity 1

DirAuthority relay1 orport=443 no-v2 v3ident=C2630BF1401BA65EFA4BE9F5F865CD265ECDE751 10.0.0.114:80 6F92C3E3C2BAC359369628C3FA716BD9387C6C6C
DirAuthority dirauth3 orport=443 no-v2 v3ident=92D7B3F141C426AB6A6E81918382782F203DCD08 10.0.0.237:80 EC3DEE5BB545F89B512395A8890DC39FC2AA3B76
DirAuthority dirauth2 orport=443 no-v2 v3ident=3ACFBB9371FE4734652D869F4B5FB7C5FE1E2AAC 10.0.0.162:80 B1CE5AF0E8B1BEE75ED4E21FCE2F112A7E465EA2

TestingDirAuthVoteExit 3ACFBB9371FE4734652D869F4B5FB7C5FE1E2AAC,C2630BF1401BA65EFA4BE9F5F865CD265ECDE751
TestingDirAuthVoteGuard 92D7B3F141C426AB6A6E81918382782F203DCD08,C2630BF1401BA65EFA4BE9F5F865CD265ECDE751,3ACFBB9371FE4734652D869F4B5FB7C5FE1E2AAC,BA8975A0D5E4EDABB1684E3C5BDE16E25BED3BC8

SocksPort 9050
ORPort 443
Address 10.0.0.162
ControlPort 9151
DirPort 80

ExitPolicy accept :

ExitRelay 1 #depends on if DA is set to be exit relay or not
ServerDNSDetectHijacking 0
ServerDNSTestAddresses
ServerDNSResolvConfFile /dev/null

AuthoritativeDirectory 1
V3AuthoritativeDirectory 1

AssumeReachable 0

V3AuthVotingInterval 10 minutes
V3AuthVoteDelay 2 minutes
V3AuthDistDelay 2 minutes

I have a python script that uses the stem library to print out all constructed circuits:

from stem import CircStatus
from stem.control import Controller

with Controller.from_port(port=9151) as controller:
controller.authenticate()

# Loops through all constructed circuits
for circ in controller.get_circuits():
    if circ.status != CircStatus.BUILT:
        continue

    print("\nCircuit: " + circ.id)

    count = 0

    # Loops through each node in current circuit
    for i, entry in enumerate(circ.path):
        fingerprint, name = entry

        descriptor = controller.get_network_status(fingerprint, None)
        address = descriptor.address if descriptor else "unknown"
        count = count + 1
        print("%s. %s: %s" % (count, name, address))

And sometimes circuits do get constructed, and the output looks like the following:

Circuit: 3864

  1. dirauth3: 10.0.0.237
  2. relay2: 10.0.0.61
  3. relay1: 10.0.0.114

Circuit: 3863

  1. dirauth3: 10.0.0.237
  2. relay2: 10.0.0.61
  3. relay1: 10.0.0.114

But 99% of the time there is no output, as no circuits are constructed. I’m not entirely sure what is wrong here. I can provide further log info if needed.