Skip to content

Commit b249270

Browse files
committed
Start transition to golang version.
1 parent b9477b7 commit b249270

File tree

9 files changed

+80
-40
lines changed

9 files changed

+80
-40
lines changed

Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,8 @@ dev-image-controller:
6969
docker push quay.io/$(QUAY_USERNAME)/hacbs-jvm-controller:"$${JBS_QUAY_IMAGE_TAG:-dev}"
7070

7171
dev: dev-image-controller
72-
cd java-components && mvn clean install -Dlocal -DskipTests -Ddev
73-
docker build . -f java-components/domain-proxy/src/main/docker/Dockerfile.local -t quay.io/$(QUAY_USERNAME)/hacbs-jvm-domain-proxy:"$${JBS_QUAY_IMAGE_TAG:-dev}"
72+
cd java-components && mvn clean install -Dlocal -DskipTests -Ddev && cd ../domain-proxy-go && go build -o domain-proxy-server domain_proxy_server.go common.go && go build -o domain-proxy-client domain_proxy_client.go common.go && cd ..
73+
docker build . -f domain-proxy-go/Dockerfile.local -t quay.io/$(QUAY_USERNAME)/hacbs-jvm-domain-proxy:"$${JBS_QUAY_IMAGE_TAG:-dev}"
7474
docker push quay.io/$(QUAY_USERNAME)/hacbs-jvm-domain-proxy:"$${JBS_QUAY_IMAGE_TAG:-dev}"
7575

7676
dev-openshift: dev

deploy/tasks/buildah-oci-ta.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -403,7 +403,7 @@ spec:
403403
if [ "${DOMAIN_PROXY}" == "true" ]; then
404404
use_domain_proxy=true
405405
echo "Build will be executed with domain proxy"
406-
/app/domain-proxy-server-runner &
406+
/app/domain-proxy-server &
407407
server_pid=$!
408408
fi
409409
fi
@@ -507,7 +507,7 @@ spec:
507507
cat >> /app/build-script.sh << 'EOF'
508508
#!/bin/sh
509509
ip link set lo up
510-
/app/domain-proxy-client-runner &
510+
/app/domain-proxy-client &
511511
client_pid=$!
512512
EOF
513513
File renamed without changes.

domain-proxy-go/common.go.disabled renamed to domain-proxy-go/common.go

Lines changed: 43 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,30 +12,36 @@ import (
1212
)
1313

1414
const (
15-
Timeout = 30 * time.Second
16-
ByteBufferSizeKey = "BYTE_BUFFER_SIZE"
17-
DefaultByteBufferSize = 1024
18-
DomainSocketKey = "DOMAIN_SOCKET"
19-
DefaultDomainSocket = "/tmp/domain-socket.sock"
15+
ByteBufferSizeKey = "BYTE_BUFFER_SIZE"
16+
DefaultByteBufferSize = 1024
17+
DomainSocketKey = "DOMAIN_SOCKET"
18+
DefaultDomainSocket = "/tmp/domain-socket.sock"
19+
ConnectionTimeoutKey = "CONNECTION_TIMEOUT"
20+
DefaultConnectionTimeout = 1000 * time.Millisecond
21+
IdleTimeoutKey = "IDLE_TIMEOUT"
22+
DefaultIdleTimeout = 10000 * time.Millisecond
2023
)
2124

22-
func ChannelToChannelBiDirectionalHandler(byteBufferSize int, leftConn, rightConn net.Conn, executor *sync.WaitGroup) {
25+
func ChannelToChannelBiDirectionalHandler(leftConn, rightConn net.Conn, byteBufferSize int, idleTimeout time.Duration, executor *sync.WaitGroup) {
2326
defer executor.Done()
2427
done := make(chan struct{})
25-
go Transfer(leftConn, rightConn, done, byteBufferSize)
26-
go Transfer(rightConn, leftConn, done, byteBufferSize)
28+
var mutex sync.Mutex
29+
go Transfer(leftConn, rightConn, done, byteBufferSize, idleTimeout, &mutex)
30+
go Transfer(rightConn, leftConn, done, byteBufferSize, idleTimeout, &mutex)
2731
<-done
2832
<-done
2933
CloseConnections(leftConn, rightConn)
3034
}
3135

32-
func Transfer(targetConn, sourceConn net.Conn, done chan struct{}, bufferSize int) {
36+
func Transfer(targetConn, sourceConn net.Conn, done chan struct{}, bufferSize int, idleTimeout time.Duration, mutex *sync.Mutex) {
3337
defer func() {
3438
done <- struct{}{}
3539
}()
3640
buf := make([]byte, bufferSize)
37-
sourceConn.SetReadDeadline(time.Now().Add(Timeout))
38-
targetConn.SetWriteDeadline(time.Now().Add(Timeout))
41+
mutex.Lock()
42+
sourceConn.SetDeadline(time.Now().Add(idleTimeout))
43+
targetConn.SetDeadline(time.Now().Add(idleTimeout))
44+
mutex.Unlock()
3945
for {
4046
n, err := sourceConn.Read(buf)
4147
if err != nil {
@@ -45,8 +51,10 @@ func Transfer(targetConn, sourceConn net.Conn, done chan struct{}, bufferSize in
4551
return
4652
}
4753
if n > 0 {
48-
sourceConn.SetReadDeadline(time.Now().Add(Timeout))
49-
targetConn.SetWriteDeadline(time.Now().Add(Timeout))
54+
mutex.Lock()
55+
sourceConn.SetDeadline(time.Now().Add(idleTimeout))
56+
targetConn.SetDeadline(time.Now().Add(idleTimeout))
57+
mutex.Unlock()
5058
_, err = targetConn.Write(buf[:n])
5159
if err != nil {
5260
log.Printf("Error writing to target: %v", err)
@@ -98,6 +106,20 @@ func GetCsvEnvVariable(key, defaultValue string) map[string]bool {
98106
return parseCsvToMap(valuesStr)
99107
}
100108

109+
func GetMillisecondsEnvVariable(key string, defaultValue time.Duration) time.Duration {
110+
valueStr := os.Getenv(key)
111+
if valueStr == "" {
112+
log.Printf("Environment variable %s is not set, using default value: %d", key, defaultValue.Milliseconds())
113+
return defaultValue
114+
}
115+
value, err := strconv.Atoi(valueStr)
116+
if err != nil {
117+
log.Printf("Invalid environment variable %s: %v, using default value: %d", key, err, defaultValue.Milliseconds())
118+
return defaultValue
119+
}
120+
return time.Duration(value) * time.Millisecond
121+
}
122+
101123
func parseCsvToMap(csvString string) map[string]bool {
102124
valuesStr := strings.Split(csvString, ",")
103125
values := make(map[string]bool)
@@ -115,3 +137,11 @@ func GetByteBufferSize() int {
115137
func GetDomainSocket() string {
116138
return GetEnvVariable(DomainSocketKey, DefaultDomainSocket)
117139
}
140+
141+
func GetConnectionTimeout() time.Duration {
142+
return GetMillisecondsEnvVariable(ConnectionTimeoutKey, DefaultConnectionTimeout)
143+
}
144+
145+
func GetIdleTimeout() time.Duration {
146+
return GetMillisecondsEnvVariable(IdleTimeoutKey, DefaultIdleTimeout)
147+
}

domain-proxy-go/domain_proxy_client.go.disabled renamed to domain-proxy-go/domain_proxy_client.go

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"os/signal"
99
"sync"
1010
"syscall"
11+
"time"
1112
)
1213

1314
const (
@@ -17,21 +18,25 @@ const (
1718
)
1819

1920
type DomainProxyClient struct {
20-
domainSocket string
21-
serverHttpPort int
22-
byteBufferSize int
23-
listener net.Listener
24-
executor *sync.WaitGroup
25-
shutdownChan chan struct{}
21+
domainSocket string
22+
serverHttpPort int
23+
byteBufferSize int
24+
connectionTimeout time.Duration
25+
idleTimeout time.Duration
26+
listener net.Listener
27+
executor *sync.WaitGroup
28+
shutdownChan chan struct{}
2629
}
2730

28-
func NewDomainProxyClient(domainSocket string, serverHttpPort, byteBufferSize int) *DomainProxyClient {
31+
func NewDomainProxyClient(domainSocket string, serverHttpPort, byteBufferSize int, connectionTimeout, idleTimeout time.Duration) *DomainProxyClient {
2932
return &DomainProxyClient{
30-
domainSocket: domainSocket,
31-
serverHttpPort: serverHttpPort,
32-
byteBufferSize: byteBufferSize,
33-
executor: &sync.WaitGroup{},
34-
shutdownChan: make(chan struct{}),
33+
domainSocket: domainSocket,
34+
serverHttpPort: serverHttpPort,
35+
byteBufferSize: byteBufferSize,
36+
connectionTimeout: connectionTimeout,
37+
idleTimeout: idleTimeout,
38+
executor: &sync.WaitGroup{},
39+
shutdownChan: make(chan struct{}),
3540
}
3641
}
3742

@@ -51,7 +56,7 @@ func (dpc *DomainProxyClient) startClient() {
5156
defer dpc.executor.Done()
5257
log.Println("HTTP server listening on port", dpc.serverHttpPort)
5358
for {
54-
conn, err := dpc.listener.Accept()
59+
serverConn, err := dpc.listener.Accept()
5560
if err != nil {
5661
select {
5762
case <-dpc.shutdownChan:
@@ -61,14 +66,14 @@ func (dpc *DomainProxyClient) startClient() {
6166
continue
6267
}
6368
}
64-
domainConn, err := net.DialTimeout("unix", dpc.domainSocket, Timeout)
69+
domainConn, err := net.DialTimeout("unix", dpc.domainSocket, dpc.connectionTimeout)
6570
if err != nil {
6671
log.Printf("Failed to connect to domain socket: %v", err)
67-
conn.Close()
72+
serverConn.Close()
6873
continue
6974
}
7075
dpc.executor.Add(1)
71-
go ChannelToChannelBiDirectionalHandler(dpc.byteBufferSize, conn, domainConn, dpc.executor)
76+
go ChannelToChannelBiDirectionalHandler(serverConn, domainConn, dpc.byteBufferSize, dpc.idleTimeout, dpc.executor)
7277
}
7378
}
7479

@@ -86,7 +91,7 @@ func GetServerHttpPort() int {
8691
}
8792

8893
func main() {
89-
client := NewDomainProxyClient(GetDomainSocket(), GetServerHttpPort(), GetByteBufferSize())
94+
client := NewDomainProxyClient(GetDomainSocket(), GetServerHttpPort(), GetByteBufferSize(), GetConnectionTimeout(), GetIdleTimeout())
9095
client.Start()
9196
sigs := make(chan os.Signal, 1)
9297
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)

domain-proxy-go/domain_proxy_server.go.disabled renamed to domain-proxy-go/domain_proxy_server.go

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ const (
2727
type DomainProxyServer struct {
2828
domainSocket string
2929
byteBufferSize int
30+
connectionTimeout time.Duration
31+
idleTimeout time.Duration
3032
proxyTargetWhitelist map[string]bool
3133
nonProxyHosts map[string]bool
3234
counter int
@@ -35,10 +37,12 @@ type DomainProxyServer struct {
3537
shutdownChan chan struct{}
3638
}
3739

38-
func NewDomainProxyServer(domainSocket string, byteBufferSize int, proxyTargetWhitelist, nonProxyHosts map[string]bool) *DomainProxyServer {
40+
func NewDomainProxyServer(domainSocket string, byteBufferSize int, connectionTimeout, idleTimeout time.Duration, proxyTargetWhitelist, nonProxyHosts map[string]bool) *DomainProxyServer {
3941
return &DomainProxyServer{
4042
domainSocket: domainSocket,
4143
byteBufferSize: byteBufferSize,
44+
connectionTimeout: connectionTimeout,
45+
idleTimeout: idleTimeout,
4246
proxyTargetWhitelist: proxyTargetWhitelist,
4347
nonProxyHosts: nonProxyHosts,
4448
counter: 0,
@@ -87,7 +91,7 @@ func (dps *DomainProxyServer) startServer() {
8791
func (dps *DomainProxyServer) handleRequest(conn net.Conn) {
8892
defer dps.executor.Done()
8993
dps.counter++
90-
conn.SetReadDeadline(time.Now().Add(Timeout))
94+
conn.SetDeadline(time.Now().Add(dps.idleTimeout))
9195
reader := bufio.NewReader(conn)
9296
req, err := http.ReadRequest(reader)
9397
if err != nil {
@@ -114,7 +118,7 @@ func (dps *DomainProxyServer) handleHttpRequest(w http.ResponseWriter, r *http.R
114118
startTime := time.Now()
115119
client := &http.Client{
116120
Transport: &http.Transport{
117-
IdleConnTimeout: Timeout,
121+
IdleConnTimeout: dps.idleTimeout,
118122
},
119123
}
120124
req, err := http.NewRequest(r.Method, r.RequestURI, r.Body)
@@ -157,7 +161,7 @@ func (dps *DomainProxyServer) handleHttpsRequest(sourceConn net.Conn, w http.Res
157161
if dps.isTargetWhitelisted(targetHost, w) {
158162
log.Printf("Target URI %s", r.RequestURI)
159163
startTime := time.Now()
160-
targetConn, err := net.DialTimeout("tcp", fmt.Sprintf("%s:%d", targetHost, targetPort), Timeout)
164+
targetConn, err := net.DialTimeout("tcp", fmt.Sprintf("%s:%d", targetHost, targetPort), dps.connectionTimeout)
161165
if err != nil {
162166
dps.handleErrorResponse(w, err, "Failed to connect to target")
163167
return
@@ -169,7 +173,7 @@ func (dps *DomainProxyServer) handleHttpsRequest(sourceConn net.Conn, w http.Res
169173
return
170174
}
171175
dps.executor.Add(1)
172-
go ChannelToChannelBiDirectionalHandler(dps.byteBufferSize, sourceConn, targetConn, dps.executor)
176+
go ChannelToChannelBiDirectionalHandler(sourceConn, targetConn, dps.byteBufferSize, dps.idleTimeout, dps.executor)
173177
}
174178
}
175179

@@ -236,6 +240,8 @@ func (rw *responseWriter) WriteHeader(statusCode int) {
236240
func main() {
237241
server := NewDomainProxyServer(GetDomainSocket(),
238242
GetByteBufferSize(),
243+
GetConnectionTimeout(),
244+
GetIdleTimeout(),
239245
GetCsvEnvVariable(ProxyTargetWhitelistKey, DefaultProxyTargetWhitelist),
240246
GetCsvEnvVariable(InternalNonProxyHostsKey, DefaultInternalNonProxyHosts), // TODO Implement Non-proxy logic
241247
)
File renamed without changes.

java-components/domain-proxy/pom.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
<profile>
3434
<id>native</id>
3535
<activation>
36-
<activeByDefault>true</activeByDefault>
3736
<property>
3837
<name>native</name>
3938
</property>

0 commit comments

Comments
 (0)