rule { include log, getLoadBalancing from "socket://localhost:8000" on { N.scopename == "log" } do { log: client( r ) -> logger( log ); _r@logger = log( log ); if( log == "S" )@logger { search_balance@logger = getLoadBalancing( log ) }; if( log == "R" )@logger { read_balance@logger = getLoadBalancing( log ) } } } rule { include getServer from "socket://localhost:8001" include search from "socket://localhost:8002" include rSearch from "socket://localhost:8003" on { N.scopename == "search" and search_balance == true } do { ser@balancer = getServer( "S" ); if( ser )@balancer{ search: client( s ) -> server( s ); if( s != "dirty" )@server{ res@server = search( s ) } else { updateRequest: server( s ) -> rserver( s ); s@rserver = "RServer un" + s; updateResponse: rserver( s ) -> server( s ); res@server = "[Server] Search operation: " + s }; response: server( res ) -> client( res ) } else { search: client( s ) -> rserver( s ); if( s != "dirty" )@rserver{ res@rserver = "[RServer] Search operation ..." } else { updateRequest: rserver( s ) -> server( s ); s@server = "Server: un" + s; updateResponse: server( s ) -> rserver( s ); res@rserver = "[RServer] Search operation: " + s }; response: rserver( res ) -> client( res ) } } } rule { include getServer from "socket://localhost:8001" include read from "socket://localhost:8002" include rRead from "socket://localhost:8003" on { N.scopename == "read" and read_balance == true } do { ser@balancer = getServer( "R" ); if( ser )@balancer{ read: client( s ) -> server( s ); if( s != "dirty" )@server{ res@server = "[Server] Read operation ..." } else { updateRequest: server( s ) -> rserver( s ); s@rserver = "RServer un" + s; updateResponse: rserver( s ) -> server( s ); res@server = "[Server] Read operation: " + s }; response: server( res ) -> client( res ) } else { read: client( s ) -> rserver( s ); if( s != "dirty" )@rserver{ res@rserver = "[RServer] Read operation ..." } else { updateRequest: rserver( s ) -> server( s ); s@server = "Server: un" + s; updateResponse: server( s ) -> rserver( s ); resp@rserver = "[RServer] Read operation: " + s }; response: rserver( res ) -> client( res ) } } } rule { on { N.scopename == "write" } do { if( writeCounter == 0 )@balancer{ writeCounter@balancer = 1 } else { writeCounter@balancer = 0 }; if( writeCounter == 0 )@balancer{ write: client( s ) -> server( s ); dirty: server( s ) -> rserver( s ); response@rserver = "[rServer] dirty operation ..."; dirtyResponse: rserver( response ) -> server( response ); response@server = response + " [Server] Write operation ..."; writeResponse: server( response ) -> client( response ) } else { write: client( s ) -> rserver( s ); dirty: rserver( s ) -> server( s ); response@server = "[Server] dirty operation ..."; dirtyResponse: server( response ) -> rserver( response ); response@rserver = response + " [rServer] Write operation ..."; writeResponse: rserver( response ) -> client( response ) } } }