[Question]: Why does my IngressController experiment not work?

This is not Bug report or Feature request

[X] I confirm that this is not bug report or feature request.

Is this question answered in the documentation?

[X] I have searched the documentation

Is there an existing issue for this?

[X] I have searched the existing issues

Your question
According to this IngressController documentation, I practiced the whole deployment process, but could not access it successfully, each configuration is as follows
ClusterRole, ServiceAccount, ClusterRoleBinding needed for easegress have also been released!
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: easegress-ingress-controller
rules:
- apiGroups: [""] # "" indicates the core API group
  resources: ["services", "endpoints", "secrets"]
  verbs: ["get", "watch", "list"]
- apiGroups: ["networking.k8s.io"]
  resources: ["ingresses"]
  verbs: ["get", "watch", "list"]

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: easegress-ingress-controller
  namespace: default

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: easegress-ingress-controller
subjects:
- kind: ServiceAccount
  name: easegress-ingress-controller
  namespace: default
roleRef:
  kind: ClusterRole
  name: easegress-ingress-controller
  apiGroup: rbac.authorization.k8s.io

root@cp01:~# kubectl describe ClusterRole easegress-ingress-controller
Name:         easegress-ingress-controller
Labels:       <none>
Annotations:  <none>
PolicyRule:
  Resources                    Non-Resource URLs  Resource Names  Verbs
  ---------                    -----------------  --------------  -----
  endpoints                    []                 []              [get watch list]
  secrets                      []                 []              [get watch list]
  services                     []                 []              [get watch list]
  ingresses.networking.k8s.io  []                 []              [get watch list]
root@cp01:~#
root@cp01:~#
root@cp01:~# kubectl describe ServiceAccount easegress-ingress-controller
Name:                easegress-ingress-controller
Namespace:           default
Labels:              <none>
Annotations:         <none>
Image pull secrets:  <none>
Mountable secrets:   <none>
Tokens:              <none>
Events:              <none>
root@cp01:~# kubectl describe ClusterRoleBinding easegress-ingress-controller
Name:         easegress-ingress-controller
Labels:       <none>
Annotations:  <none>
Role:
  Kind:  ClusterRole
  Name:  easegress-ingress-controller
Subjects:
  Kind            Name                          Namespace
  ----            ----                          ---------
  ServiceAccount  easegress-ingress-controller  default

The ingress ingress-example has been successfully released with its ingressClassName set to easegress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-example
spec:
  ingressClassName: easegress
  rules:
  - host: "www.example.com"
    http:
      paths:
      - pathType: Prefix
        path: /
        backend:
          service:
            name: hello-service
            port:
              number: 39090
  - host: "*.megaease.com"
    http:
      paths:
      - pathType: Prefix
        path: /
        backend:
          service:
            name: hello-service
            port:
              number: 49191

root@cp01:~# kubectl describe ingress
Name:             ingress-example
Labels:           <none>
Namespace:        default
Address:
Ingress Class:    easegress
Default backend:  <default>
Rules:
  Host             Path  Backends
  ----             ----  --------
  www.example.com
                   /   hello-service:39090 (<IP_ADDRESS>:9090,<IP_ADDRESS>:9090)
  *.megaease.com
                   /   hello-service:49191 (<IP_ADDRESS>:9191,<IP_ADDRESS>:9191)
Annotations:       <none>
Events:            <none>

service easegress-public has been successfully released with the following configuration
root@cp01:~# kcgs
NAME               TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                           AGE   SELECTOR
easegress-public   NodePort    <IP_ADDRESS>   <none>        8080:30080/TCP                    19m   app=easegress-ingress
hello-service      NodePort    <IP_ADDRESS>   <none>        39090:30281/TCP,49191:31381/TCP   2d    app=products,department=sales
kubernetes         ClusterIP   <IP_ADDRESS>       <none>        443/TCP                           14d   <none>
root@cp01:~#

root@cp01:~# kcds easegress-public
Name:                     easegress-public
Namespace:                default
Labels:                   <none>
Annotations:              <none>
Selector:                 app=easegress-ingress
Type:                     NodePort
IP Family Policy:         SingleStack
IP Families:              IPv4
IP:                       <IP_ADDRESS>
IPs:                      <IP_ADDRESS>
Port:                     web  8080/TCP
TargetPort:               8080/TCP
NodePort:                 web  30080/TCP
Endpoints:                <IP_ADDRESS>:8080
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

echo '
apiVersion: v1
kind: Service
metadata:
  name: easegress-public
  namespace: default
spec:
  ports:
  - name: web
    protocol: TCP
    port: 8080
    nodePort: 30080
  selector:
    app: easegress-ingress
  type: NodePort ' | kubectl apply -f -

The deployment of easegress corresponding to service easegress-public has also been released and is running, as follow
root@cp01:~# kcgd
NAME               READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS          IMAGES                                                                        SELECTOR
easegress          1/1     1            1           26m   easegress-primary   privatehub:5000/arm_easegress:2.7.0                                           app=easegress-ingress
hello-deployment   2/2     2            2           47h   hello-v1,hello-v2   privatehub:5000/arm_nginx_9090:latest,privatehub:5000/arm_nginx_9191:latest   app=products,department=sales
root@cp01:~#
root@cp01:~#
root@cp01:~# kcdd easegress
Name:                   easegress
Namespace:              default
CreationTimestamp:      Sun, 04 Feb 2024 08:16:59 +0000
Labels:                 app=easegress-ingress
Annotations:            deployment.kubernetes.io/revision: 1
Selector:               app=easegress-ingress
Replicas:               1 desired | 1 updated | 1 total | 1 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:           app=easegress-ingress
  Service Account:  easegress-ingress-controller
  Containers:
   easegress-primary:
    Image:      privatehub:5000/arm_easegress:2.7.0
    Port:       <none>
    Host Port:  <none>
    Command:
      /bin/sh
    Args:
      -c
      /opt/easegress/bin/easegress-server \
        -f /opt/eg-config/easegress-server.yaml \
        --initial-object-config-files /opt/eg-config/controller.yaml \
        --initial-cluster $(EG_NAME)=http://localhost:2380
    Limits:
      cpu:     1200m
      memory:  2Gi
    Requests:
      cpu:     100m
      memory:  256Mi
    Environment:
      EG_NAME:   (v1:metadata.name)
    Mounts:
      /opt/easegress/data from ingress-data-volume (rw)
      /opt/easegress/log from ingress-data-volume (rw)
      /opt/eg-config/controller.yaml from easegress-cm (rw,path="controller.yaml")
      /opt/eg-config/easegress-server.yaml from easegress-cm (rw,path="easegress-server.yaml")
  Volumes:
   ingress-data-volume:
    Type:       EmptyDir (a temporary directory that shares a pod's lifetime)
    Medium:
    SizeLimit:  <unset>
   easegress-cm:
    Type:      ConfigMap (a volume populated by a ConfigMap)
    Name:      easegress-cm
    Optional:  false
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    NewReplicaSetAvailable
OldReplicaSets:  <none>
NewReplicaSet:   easegress-7c47dfd8b4 (1/1 replicas created)
Events:
  Type    Reason             Age   From                   Message
  ----    ------             ----  ----                   -------
  Normal  ScalingReplicaSet  26m   deployment-controller  Scaled up replica set easegress-7c47dfd8b4 to 1

echo '
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: easegress-ingress
  name: easegress
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: easegress-ingress
  template:
    metadata:
      labels:
        app: easegress-ingress
    spec:
      serviceAccountName: easegress-ingress-controller
      containers:
      - args:
        - -c
        - |-
          /opt/easegress/bin/easegress-server \
            -f /opt/eg-config/easegress-server.yaml \
            --initial-object-config-files /opt/eg-config/controller.yaml \
            --initial-cluster $(EG_NAME)=http://localhost:2380
        command:
        - /bin/sh
        env:
        - name: EG_NAME
          valueFrom:
            fieldRef:
              apiVersion: v1
              fieldPath: metadata.name
        image: privatehub:5000/arm_easegress:2.7.0
        imagePullPolicy: IfNotPresent
        name: easegress-primary
        resources:
          limits:
            cpu: 1200m
            memory: 2Gi
          requests:
            cpu: 100m
            memory: 256Mi
        volumeMounts:
        - mountPath: /opt/eg-config/easegress-server.yaml
          name: easegress-cm
          subPath: easegress-server.yaml
        - mountPath: /opt/eg-config/controller.yaml
          name: easegress-cm
          subPath: controller.yaml
        - mountPath: /opt/easegress/data
          name: ingress-data-volume
        - mountPath: /opt/easegress/log
          name: ingress-data-volume
      restartPolicy: Always
      volumes:
      - emptyDir: {}
        name: ingress-data-volume
      - configMap:
          defaultMode: 420
          items:
          - key: easegress-server.yaml
            path: easegress-server.yaml
          - key: controller.yaml
            path: controller.yaml
          name: easegress-cm
        name: easegress-cm ' | kubectl apply -f -

Here are a few points of clarification:
the mirror privatehub:5000/arm_easegress:2.7.0 used here is compiled by myself on the arm64 architecture, which I have already used in other practices, and I guarantee that there will be no problems!
The ConfigMap easegress-cm used by Deployment has also been released as follows
root@cp01:~# kubectl describe configmap easegress-cm
Name:         easegress-cm
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
easegress-server.yaml:
----
name: ingress-easegress
cluster-name: easegress-ingress-controller
cluster-role: primary
api-addr: <IP_ADDRESS>:2381
data-dir: /opt/easegress/data
log-dir: /opt/easegress/log
debug: false

controller.yaml:
----
kind: IngressController
name: ingress-controller-example
kubeConfig: |
  apiVersion: v1
  clusters:
  - cluster:
      certificate-authority-data: LS0tLS1CRUdJTiBD....
      server: https://<IP_ADDRESS>:6443
    name: kubernetes
  contexts:
  - context:
      cluster: kubernetes
      user: kubernetes-admin
    name: kubernetes-admin@kubernetes
  current-context: kubernetes-admin@kubernetes
  kind: Config
  preferences: {}
  users:
  - name: kubernetes-admin
    user:
      client-certificate-data: LS0tLS1CRUd.....
      client-key-data: LS0tLS1CRUdJTiBSU0....
masterURL: https://<IP_ADDRESS>:6443
namespaces: ["default"]
ingressClass: easegress
httpServer:
  port: 8080
  https: false
  keepAlive: true
  keepAliveTimeout: 60s
  maxConnections: 10240

BinaryData
====

Events:  <none>

The content of kubeConfig is taken from the .kube/config file needed to access K8S, and the value of masterURL - "https://<IP_ADDRESS>:6443" is the K8S API URL.
I know that according to the documentation Kubernetes Ingress Controller these two values are set when easegress is deployed outside of the K8S cluster, but I also tried not setting these two values, but the result is still not accessible, the result is the same!
The service hello-service and deployment hello-deployment corresponding to the backend are also successfully published and running.
root@cp01:~# kubectl describe service hello-service
Name:                     hello-service
Namespace:                default
Labels:                   <none>
Annotations:              <none>
Selector:                 app=products,department=sales
Type:                     NodePort
IP Family Policy:         SingleStack
IP Families:              IPv4
IP:                       <IP_ADDRESS>
IPs:                      <IP_ADDRESS>
Port:                     port-v1  39090/TCP
TargetPort:               9090/TCP
NodePort:                 port-v1  30281/TCP
Endpoints:                <IP_ADDRESS>:9090,<IP_ADDRESS>:9090
Port:                     port-v2  49191/TCP
TargetPort:               9191/TCP
NodePort:                 port-v2  31381/TCP
Endpoints:                <IP_ADDRESS>:9191,<IP_ADDRESS>:9191
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>
root@cp01:~#
root@cp01:~# kubectl describe hello-deployment
error: the server doesn't have a resource type "hello-deployment"
root@cp01:~# kubectl describe deployment hello-deployment
Name:                   hello-deployment
Namespace:              default
CreationTimestamp:      Fri, 02 Feb 2024 08:43:45 +0000
Labels:                 <none>
Annotations:            deployment.kubernetes.io/revision: 1
Selector:               app=products,department=sales
Replicas:               2 desired | 2 updated | 2 total | 2 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  app=products
           department=sales
  Containers:
   hello-v1:
    Image:      privatehub:5000/arm_nginx_9090:latest
    Port:       <none>
    Host Port:  <none>
    Environment:
      PORT:  9090
    Mounts:  <none>
   hello-v2:
    Image:      privatehub:5000/arm_nginx_9191:latest
    Port:       <none>
    Host Port:  <none>
    Environment:
      PORT:  9191
    Mounts:  <none>
  Volumes:   <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    NewReplicaSetAvailable
OldReplicaSets:  <none>
NewReplicaSet:   hello-deployment-7d8d8556d7 (2/2 replicas created)
Events:          <none>

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-deployment
spec:
  selector:
    matchLabels:
      app: products
      department: sales
  replicas: 2
  template:
    metadata:
      labels:
        app: products
        department: sales
    spec:
      containers:
      - name: hello-v1
        image: "privatehub:5000/arm_nginx_9090:latest"
        env:
        - name: "PORT"
          value: "9090"
      - name: hello-v2
        image: "privatehub:5000/arm_nginx_9191:latest"
        env:
        - name: "PORT"
          value: "9191"

---
apiVersion: v1
kind: Service
metadata:
  name: hello-service
spec:
  type: NodePort
  selector:
    app: products
    department: sales
  ports:
  - name: port-v1
    protocol: TCP
    port: 39090
    targetPort: 9090
  - name: port-v2
    protocol: TCP
    port: 49191
    targetPort: 9191

I bypassed ingress and tested that the service and deployment can be accessed successfully.
root@cp01:~# curl http://<IP_ADDRESS>:39090
IP Address: <IP_ADDRESS>
Port 9090
Welcome to Kursk
root@cp01:~#
root@cp01:~#
root@cp01:~# curl http://<IP_ADDRESS>:49191
IP Address: <IP_ADDRESS>
Port 9191
Welcome to Kursk

The ip and port displayed are the respone of my own nginx service definition.
It doesn't feel like there's a problem anywhere, but when I access the NodePort port of the service easegress-public that ingress corresponds to it hangs and fails to respond
root@cp01:~# kcgs
NAME               TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                           AGE    SELECTOR
easegress-public   NodePort    <IP_ADDRESS>   <none>        8080:30080/TCP                    71m    app=easegress-ingress
hello-service      NodePort    <IP_ADDRESS>   <none>        39090:30281/TCP,49191:31381/TCP   2d1h   app=products,department=sales
kubernetes         ClusterIP   <IP_ADDRESS>       <none>        443/TCP                           14d    <none>

root@cp01:~# curl http://<IP_ADDRESS>:30080 -HHost:www.megaease.com
curl: (7) Failed to connect to <IP_ADDRESS> port 30080 after 802 ms: Connection refused
root@cp01:~#
root@cp01:~# curl http://<IP_ADDRESS>:30080 -HHost:www.example.com
curl: (7) Failed to connect to <IP_ADDRESS> port 30080 after 116 ms: Connection refused

As a final addendum, cp01 is one of the control planes in the K8S cluster, and again I accessed it from a machine external to the K8S cluster, and of course I added a route to this machine pointing to the CLUSTER IP <IP_ADDRESS> of service easegress-public. But the result is no response, hang on!
traceroute command is also not responding (I'm using the TCP protocol and the destination port in order to be caught by the Iptables rule)
root@iot03:~# ip route
default via <IP_ADDRESS> dev ens34 proto static
<IP_ADDRESS> via <IP_ADDRESS> dev ens34
<IP_ADDRESS>/16 dev docker0 proto kernel scope link src <IP_ADDRESS>
<IP_ADDRESS>/16 dev br-24240aaf3820 proto kernel scope link src <IP_ADDRESS>
<IP_ADDRESS>/24 dev ens34 proto kernel scope link src <IP_ADDRESS>
root@iot03:~#
root@iot03:~#
root@iot03:~#
root@iot03:~# traceroute -T -p 30080 <IP_ADDRESS>
traceroute to <IP_ADDRESS> (<IP_ADDRESS>), 30 hops max, 60 byte packets
 1  cp01.lan (<IP_ADDRESS>)  0.753 ms  0.690 ms  0.670 ms
 2  * * *
 3  * * *
 4  * * *
 5  * * *
 6  * * *
 7  * * *
 8  * * *
 9  * * *
10  * * *
11  * * *
12  * * *
13  * * *
14  * * *
15  * * *
16  * * *
17  * * *
18  * * *
19  * * *
20  * * *
21  * * *
22  * * *
23  * * *
24  * * *
25  * * *
26  * * *
27  * * *
28  * * *
29  * * *
30  * * *
root@iot03:~# curl http://<IP_ADDRESS>:30080 -HHost:www.megaease.com

Can you post the whole logs of the Easegress ingress controller pod, maybe the reason lies in there?

ok, logs of Easegress  ingress cm pod as follow:
2024-02-04T12:26:36.503Z        ERROR   ingresscontroller/ingresscontroller.go:142      failed to create kubernetes client: error loading config file "apiVersion: v1
clusters:

cluster:
certificate-authority-data: .....
server: https://<IP_ADDRESS>:6443
name: kubernetes
contexts:
context:
cluster: kubernetes
user: kubernetes-admin
name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
name: kubernetes-admin
user:
client-certificate-data: LS0tLS1CRU....
client-key-data: LS0tLS1CRUdJ...
": open apiVersion: v1
clusters:
cluster:
certificate-authority-data: LS0tLS1CR.....
server: https://<IP_ADDRESS>:6443
name: kubernetes
contexts:
context:
cluster: kubernetes
user: kubernetes-admin
name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
name: kubernetes-admin
user:
client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ...M^C

I know that according to the documentation Kubernetes Ingress Controller these two values are set when easegress is deployed outside of the K8S cluster, but I also tried not setting these two values, but the result is still not accessible, the result is the same!

Please don't set these two fields, and restart the deployment, then post the log. Because your way is in-cluster way, you shouldn't set kubeConfig and masterURL.

ok, I left the kubeConfig and masterURL values unset and restarted the deployment easegress
ConfigMap as follow:
apiVersion: v1
kind: ConfigMap
metadata:
  name: easegress-cm
  namespace: default
data:
  easegress-server.yaml: |
    name: ingress-easegress
    cluster-name: easegress-ingress-controller
    cluster-role: primary
    api-addr: <IP_ADDRESS>:2381
    data-dir: /opt/easegress/data
    log-dir: /opt/easegress/log
    debug: true    #  I set up debug, but there doesn't seem to be any extra logging content
  controller.yaml: |
    kind: IngressController
    name: ingress-controller-example
    kubeConfig:
    masterURL:
    namespaces: ["default"]
    ingressClass: easegress
    httpServer:
      port: 8080
      https: false
      keepAlive: true
      keepAliveTimeout: 60s
      maxConnections: 10240'

Then I tested it from CP01, which is one of the K8S control planes, and it still didn't work!
root@cp01:~# curl http://<IP_ADDRESS>:8080/ -HHost:www.megaease.com
root@cp01:~#

I'm also checking the logs in the pod in easegress as follows
root@cp01:~# kcgp
NAME                                READY   STATUS    RESTARTS   AGE     IP               NODE   NOMINATED NODE   READINESS GATES
easegress-555bcf6dc8-9n85l          1/1     Running   0          2m14s   <IP_ADDRESS>    wn02   <none>           <none>
hello-deployment-7d8d8556d7-78gl7   2/2     Running   0          2d22h   <IP_ADDRESS>    wn02   <none>           <none>
hello-deployment-7d8d8556d7-wg7rz   2/2     Running   0          2d22h   <IP_ADDRESS>   wn03   <none>           <none>
net-tool-pod                        1/1     Running   0          14d     <IP_ADDRESS>    wn01   <none>           <none>
root@cp01:~#
root@cp01:~# kubectl exec -it easegress-555bcf6dc8-9n85l -- /bin/sh
/opt/easegress #
/opt/easegress # cd log
/opt/easegress/log # ls -l
total 24
-rw-r-----    1 root     root             0 Feb  5 07:08 admin_api.log
-rw-r--r--    1 root     root             0 Feb  5 07:08 etcd_client.log
-rw-r--r--    1 root     root          8764 Feb  5 07:08 etcd_server.log
-rw-r-----    1 root     root             0 Feb  5 07:08 filter_http_access.log
-rw-r-----    1 root     root             0 Feb  5 07:08 filter_http_dump.log
drwx------    4 root     root          4096 Feb  5 07:08 member
-rw-r-----    1 root     root             0 Feb  5 07:08 otel.log
-rw-r-----    1 root     root          7136 Feb  5 07:08 stdout.log
/opt/easegress/log # tail -f filter_http_access.log
[2024-02-05T07:11:44.707Z] [<IP_ADDRESS>:39618 <IP_ADDRESS> GET / HTTP/1.1 404] [400µs rx:56B tx:16B] []
[2024-02-05T07:16:14.98Z] [<IP_ADDRESS>:42806 <IP_ADDRESS> GET / HTTP/1.1 404] [315µs rx:56B tx:16B] []
[2024-02-05T07:17:07.756Z] [<IP_ADDRESS>:41976 <IP_ADDRESS> GET / HTTP/1.1 404] [341µs rx:56B tx:16B] []
[2024-02-05T07:17:44.429Z] [<IP_ADDRESS>:31426 <IP_ADDRESS> GET / HTTP/1.1 404] [308µs rx:56B tx:16B] []
[2024-02-05T07:18:54.832Z] [<IP_ADDRESS>:54139 <IP_ADDRESS> GET / HTTP/1.1 404] [1.161ms rx:56B tx:16B] []
[2024-02-05T07:31:53.096Z] [<IP_ADDRESS>:41748 <IP_ADDRESS> GET / HTTP/1.1 404] [302µs rx:56B tx:16B] []
[2024-02-05T07:31:55.826Z] [<IP_ADDRESS>:45322 <IP_ADDRESS> GET / HTTP/1.1 404] [656µs rx:56B tx:16B] []
[2024-02-05T07:31:57.601Z] [<IP_ADDRESS>:64148 <IP_ADDRESS> GET / HTTP/1.1 404] [308µs rx:56B tx:16B] []

/opt/easegress/log # tail -f stdout.log
2024-02-05T07:08:25.58Z INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_p25> is created!
2024-02-05T07:08:25.58Z INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_p50> is created!
2024-02-05T07:08:25.58Z INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_p75> is created!
2024-02-05T07:08:25.581Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_p95> is created!
2024-02-05T07:08:25.581Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_p98> is created!
2024-02-05T07:08:25.581Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_p99> is created!
2024-02-05T07:08:25.581Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_p999> is created!
2024-02-05T07:08:25.582Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_req_size> is created!
2024-02-05T07:08:25.582Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_resp_size> is created!
2024-02-05T07:08:25.582Z        INFO    trafficcontroller/trafficcontroller.go:283      create traffic gate ingress-controller-example/ingresscontroller/http-server-ingress-controller
2024-02-05T07:11:44.707Z        ERROR   httpserver/mux.go:335   http-server-ingress-controller: status code of result route for [GET /]: 404
2024-02-05T07:16:14.98Z ERROR   httpserver/mux.go:335   http-server-ingress-controller: status code of result route for [GET /]: 404
2024-02-05T07:17:07.756Z        ERROR   httpserver/mux.go:335   http-server-ingress-controller: status code of result route for [GET /]: 404
2024-02-05T07:17:44.429Z        ERROR   httpserver/mux.go:335   http-server-ingress-controller: status code of result route for [GET /]: 404
2024-02-05T07:18:54.832Z        ERROR   httpserver/mux.go:335   http-server-ingress-controller: status code of result route for [GET /]: 404
2024-02-05T07:31:53.096Z        ERROR   httpserver/mux.go:335   http-server-ingress-controller: status code of result route for [GET /]: 404
2024-02-05T07:31:55.826Z        ERROR   httpserver/mux.go:335   http-server-ingress-controller: status code of result route for [GET /]: 404
2024-02-05T07:31:57.601Z        ERROR   httpserver/mux.go:335   http-server-ingress-controller: status code of result route for [GET /]: 404

The path / here should be responsive, not 404, because the services corresponding to the backend are normal.
root@cp01:~# kcgs
NAME               TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                           AGE     SELECTOR
easegress-public   NodePort    <IP_ADDRESS>   <none>        8080:30080/TCP                    23h     app=easegress-ingress
hello-service      NodePort    <IP_ADDRESS>   <none>        39090:30281/TCP,49191:31381/TCP   2d23h   app=products,department=sales
kubernetes         ClusterIP   <IP_ADDRESS>       <none>        443/TCP                           15d     <none>
root@cp01:~#
root@cp01:~# curl http://<IP_ADDRESS>:39090/
IP Address: <IP_ADDRESS>
Port 9090
Welcome to Kursk
root@cp01:~# curl http://<IP_ADDRESS>:49191/
IP Address: <IP_ADDRESS>
Port 9191
Welcome to Kursk

I kind of wonder if the httpserver configuration in the example is missing path option
httpServer:
      port: 8080
      https: false
      keepAlive: true
      keepAliveTimeout: 60s
      maxConnections: 10240'
      rule:  # Do need to configure this option?
         paths:
         - path:
         - pathPrefix

You should post content from stdout.log, which indicate the server and pipeline were created correctly or not.
/ could be 404, you should curl with path configured in Ingress.
Use egctl describe httpserver <httpserver-name> to get spec of httpserver of IngressController.

path / is configured in ingress and should be fine.

root@cp01:~# kubectl describe ingress ingress-example
Name:             ingress-example
Labels:           <none>
Namespace:        default
Address:
Ingress Class:    easegress
Default backend:  <default>
Rules:
  Host             Path  Backends
  ----             ----  --------
  www.example.com
                   /   hello-service:39090 (<IP_ADDRESS>:9090,<IP_ADDRESS>:9090)
  *.megaease.com
                   /   hello-service:49191 (<IP_ADDRESS>:9191,<IP_ADDRESS>:9191)
Annotations:       <none>
Events:            <none>
root@cp01:~#
root@cp01:~#
root@cp01:~# curl http://<IP_ADDRESS>:30080/ -HHost:www.megaease.com
curl: (7) Failed to connect to <IP_ADDRESS> port 30080 after 865 ms: Connection refused
root@cp01:~# curl http://<IP_ADDRESS>:8080/ -HHost:www.megaease.com
root@cp01:~#
root@cp01:~#

I redeployed deployment easegress，The complete stdout.log content is as follows, with httpserver related logs

/opt/easegress/log # cat stdout.log
2024-02-06T06:58:07.114Z        INFO    cmd/server.go:61        Easegress release: v2.7.0, repo: https://github.com/megaease/easegress.git, commit: git-25e42408
2024-02-06T06:58:07.115Z        INFO    cluster/config.go:110   etcd config: advertise-client-urls: [{Scheme:http Opaque: User: Host:localhost:2379 Path: RawPath: OmitHost:false ForceQuery:false RawQuery: Fragment: RawFragment:}] advertise-peer-urls: [{Scheme:http Opaque: User: Host:localhost:2380 Path: RawPath: OmitHost:false ForceQuery:false RawQuery: Fragment: RawFragment:}] init-cluster: easegress-7c47dfd8b4-97wlw=http://localhost:2380 cluster-state: new force-new-cluster: false
2024-02-06T06:58:07.86Z INFO    cluster/cluster.go:314  client connect with endpoints: [http://localhost:2380]
2024-02-06T06:58:07.862Z        INFO    cluster/cluster.go:328  client is ready
2024-02-06T06:58:07.873Z        INFO    cluster/cluster.go:620  server is ready
2024-02-06T06:58:07.887Z        INFO    cluster/cluster.go:480  lease is ready (grant new one: 67db8d7d35b0b007)
2024-02-06T06:58:07.887Z        INFO    cluster/cluster.go:208  cluster is ready
2024-02-06T06:58:07.936Z        INFO    supervisor/supervisor.go:140    create TrafficController
2024-02-06T06:58:07.956Z        INFO    supervisor/supervisor.go:140    create RawConfigTrafficController
2024-02-06T06:58:07.97Z INFO    supervisor/supervisor.go:140    create ServiceRegistry
2024-02-06T06:58:07.981Z        INFO    supervisor/supervisor.go:140    create StatusSyncController
2024-02-06T06:58:07.981Z        INFO    statussynccontroller/statussynccontroller.go:172     StatusUpdateMaxBatchSize is 20
2024-02-06T06:58:07.989Z        INFO    cluster/cluster.go:520  session is ready
2024-02-06T06:58:07.989Z        INFO    supervisor/supervisor.go:213    create ingress-controller-example
2024-02-06T06:58:07.99Z INFO    supervisor/supervisor.go:201    update TrafficController
2024-02-06T06:58:07.991Z        INFO    api/api.go:76   register api group admin
2024-02-06T06:58:07.992Z        INFO    supervisor/supervisor.go:201    update RawConfigTrafficController
2024-02-06T06:58:07.993Z        INFO    api/server.go:109       api server running in <IP_ADDRESS>:2381
2024-02-06T06:58:07.994Z        INFO    supervisor/supervisor.go:201    update ServiceRegistry
2024-02-06T06:58:08.002Z        INFO    supervisor/supervisor.go:201    update StatusSyncController
2024-02-06T06:58:08.002Z        INFO    statussynccontroller/statussynccontroller.go:172     StatusUpdateMaxBatchSize is 20
2024-02-06T06:58:08.029Z        INFO    ingresscontroller/ingresscontroller.go:150      successfully connect to kubernetes
2024-02-06T06:58:08.13Z INFO    ingresscontroller/ingresscontroller.go:170      successfully watched ingress related resources
2024-02-06T06:58:08.17Z INFO    trafficcontroller/trafficcontroller.go:273      create namespace ingress-controller-example/ingresscontroller
2024-02-06T06:58:08.171Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_health> is created!
2024-02-06T06:58:08.171Z        INFO    prometheushelper/helper.go:70   [prometheus_helper] Counter <httpserver_total_requests> is created!
2024-02-06T06:58:08.171Z        INFO    prometheushelper/helper.go:70   [prometheus_helper] Counter <httpserver_total_responses> is created!
2024-02-06T06:58:08.172Z        INFO    prometheushelper/helper.go:70   [prometheus_helper] Counter <httpserver_total_error_requests> is created!
2024-02-06T06:58:08.172Z        INFO    prometheushelper/helper.go:123  [prometheus_helper] Histogram <httpserver_requests_duration> already created!
2024-02-06T06:58:08.172Z        INFO    prometheushelper/helper.go:123  [prometheus_helper] Histogram <httpserver_requests_size_bytes> already created!
2024-02-06T06:58:08.172Z        INFO    prometheushelper/helper.go:123  [prometheus_helper] Histogram <httpserver_responses_size_bytes> already created!
2024-02-06T06:58:08.172Z        INFO    prometheushelper/helper.go:148  [prometheus_helper] Summary <httpserver_requests_duration_percentage> already created!
2024-02-06T06:58:08.172Z        INFO    prometheushelper/helper.go:148  [prometheus_helper] Summary <httpserver_requests_size_bytes_percentage> already created!
2024-02-06T06:58:08.173Z        INFO    prometheushelper/helper.go:148  [prometheus_helper] Summary <httpserver_responses_size_bytes_percentage> already created!
2024-02-06T06:58:08.173Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_m1> is created!
2024-02-06T06:58:08.173Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_m5> is created!
2024-02-06T06:58:08.173Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_m15> is created!
2024-02-06T06:58:08.173Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_m1_err> is created!
2024-02-06T06:58:08.173Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_m5_err> is created!
2024-02-06T06:58:08.173Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_m15_err> is created!
2024-02-06T06:58:08.174Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_m1_err_percent> is created!
2024-02-06T06:58:08.174Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_m5_err_percent> is created!
2024-02-06T06:58:08.174Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_m15_err_percent> is created!
2024-02-06T06:58:08.174Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_min> is created!
2024-02-06T06:58:08.174Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_max> is created!
2024-02-06T06:58:08.175Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_mean> is created!
2024-02-06T06:58:08.175Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_p25> is created!
2024-02-06T06:58:08.175Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_p50> is created!
2024-02-06T06:58:08.175Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_p75> is created!
2024-02-06T06:58:08.175Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_p95> is created!
2024-02-06T06:58:08.175Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_p98> is created!
2024-02-06T06:58:08.176Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_p99> is created!
2024-02-06T06:58:08.176Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_p999> is created!
2024-02-06T06:58:08.176Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_req_size> is created!
2024-02-06T06:58:08.176Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_resp_size> is created!
2024-02-06T06:58:08.176Z        INFO    trafficcontroller/trafficcontroller.go:283      create traffic gate ingress-controller-example/ingresscontroller/http-server-ingress-controller
/opt/easegress/log # cat stdout.log
2024-02-06T06:58:07.114Z        INFO    cmd/server.go:61        Easegress release: v2.7.0, repo: https://github.com/megaease/easegress.git, commit: git-25e42408
2024-02-06T06:58:07.115Z        INFO    cluster/config.go:110   etcd config: advertise-client-urls: [{Scheme:http Opaque: User: Host:localhost:2379 Path: RawPath: OmitHost:false ForceQuery:false RawQuery: Fragment: RawFragment:}] advertise-peer-urls: [{Scheme:http Opaque: User: Host:localhost:2380 Path: RawPath: OmitHost:false ForceQuery:false RawQuery: Fragment: RawFragment:}] init-cluster: easegress-7c47dfd8b4-97wlw=http://localhost:2380 cluster-state: new force-new-cluster: false
2024-02-06T06:58:07.86Z INFO    cluster/cluster.go:314  client connect with endpoints: [http://localhost:2380]
2024-02-06T06:58:07.862Z        INFO    cluster/cluster.go:328  client is ready
2024-02-06T06:58:07.873Z        INFO    cluster/cluster.go:620  server is ready
2024-02-06T06:58:07.887Z        INFO    cluster/cluster.go:480  lease is ready (grant new one: 67db8d7d35b0b007)
2024-02-06T06:58:07.887Z        INFO    cluster/cluster.go:208  cluster is ready
2024-02-06T06:58:07.936Z        INFO    supervisor/supervisor.go:140    create TrafficController
2024-02-06T06:58:07.956Z        INFO    supervisor/supervisor.go:140    create RawConfigTrafficController
2024-02-06T06:58:07.97Z INFO    supervisor/supervisor.go:140    create ServiceRegistry
2024-02-06T06:58:07.981Z        INFO    supervisor/supervisor.go:140    create StatusSyncController
2024-02-06T06:58:07.981Z        INFO    statussynccontroller/statussynccontroller.go:172     StatusUpdateMaxBatchSize is 20
2024-02-06T06:58:07.989Z        INFO    cluster/cluster.go:520  session is ready
2024-02-06T06:58:07.989Z        INFO    supervisor/supervisor.go:213    create ingress-controller-example
2024-02-06T06:58:07.99Z INFO    supervisor/supervisor.go:201    update TrafficController
2024-02-06T06:58:07.991Z        INFO    api/api.go:76   register api group admin
2024-02-06T06:58:07.992Z        INFO    supervisor/supervisor.go:201    update RawConfigTrafficController
2024-02-06T06:58:07.993Z        INFO    api/server.go:109       api server running in <IP_ADDRESS>:2381
2024-02-06T06:58:07.994Z        INFO    supervisor/supervisor.go:201    update ServiceRegistry
2024-02-06T06:58:08.002Z        INFO    supervisor/supervisor.go:201    update StatusSyncController
2024-02-06T06:58:08.002Z        INFO    statussynccontroller/statussynccontroller.go:172     StatusUpdateMaxBatchSize is 20
2024-02-06T06:58:08.029Z        INFO    ingresscontroller/ingresscontroller.go:150      successfully connect to kubernetes
2024-02-06T06:58:08.13Z INFO    ingresscontroller/ingresscontroller.go:170      successfully watched ingress related resources
2024-02-06T06:58:08.17Z INFO    trafficcontroller/trafficcontroller.go:273      create namespace ingress-controller-example/ingresscontroller
2024-02-06T06:58:08.171Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_health> is created!
2024-02-06T06:58:08.171Z        INFO    prometheushelper/helper.go:70   [prometheus_helper] Counter <httpserver_total_requests> is created!
2024-02-06T06:58:08.171Z        INFO    prometheushelper/helper.go:70   [prometheus_helper] Counter <httpserver_total_responses> is created!
2024-02-06T06:58:08.172Z        INFO    prometheushelper/helper.go:70   [prometheus_helper] Counter <httpserver_total_error_requests> is created!
2024-02-06T06:58:08.172Z        INFO    prometheushelper/helper.go:123  [prometheus_helper] Histogram <httpserver_requests_duration> already created!
2024-02-06T06:58:08.172Z        INFO    prometheushelper/helper.go:123  [prometheus_helper] Histogram <httpserver_requests_size_bytes> already created!
2024-02-06T06:58:08.172Z        INFO    prometheushelper/helper.go:123  [prometheus_helper] Histogram <httpserver_responses_size_bytes> already created!
2024-02-06T06:58:08.172Z        INFO    prometheushelper/helper.go:148  [prometheus_helper] Summary <httpserver_requests_duration_percentage> already created!
2024-02-06T06:58:08.172Z        INFO    prometheushelper/helper.go:148  [prometheus_helper] Summary <httpserver_requests_size_bytes_percentage> already created!
2024-02-06T06:58:08.173Z        INFO    prometheushelper/helper.go:148  [prometheus_helper] Summary <httpserver_responses_size_bytes_percentage> already created!
2024-02-06T06:58:08.173Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_m1> is created!
2024-02-06T06:58:08.173Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_m5> is created!
2024-02-06T06:58:08.173Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_m15> is created!
2024-02-06T06:58:08.173Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_m1_err> is created!
2024-02-06T06:58:08.173Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_m5_err> is created!
2024-02-06T06:58:08.173Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_m15_err> is created!
2024-02-06T06:58:08.174Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_m1_err_percent> is created!
2024-02-06T06:58:08.174Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_m5_err_percent> is created!
2024-02-06T06:58:08.174Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_m15_err_percent> is created!
2024-02-06T06:58:08.174Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_min> is created!
2024-02-06T06:58:08.174Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_max> is created!
2024-02-06T06:58:08.175Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_mean> is created!
2024-02-06T06:58:08.175Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_p25> is created!
2024-02-06T06:58:08.175Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_p50> is created!
2024-02-06T06:58:08.175Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_p75> is created!
2024-02-06T06:58:08.175Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_p95> is created!
2024-02-06T06:58:08.175Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_p98> is created!
2024-02-06T06:58:08.176Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_p99> is created!
2024-02-06T06:58:08.176Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_p999> is created!
2024-02-06T06:58:08.176Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_req_size> is created!
2024-02-06T06:58:08.176Z        INFO    prometheushelper/helper.go:98   [prometheus_helper] Gauge <httpserver_resp_size> is created!
2024-02-06T06:58:08.176Z        INFO    trafficcontroller/trafficcontroller.go:283      create traffic gate ingress-controller-example/ingresscontroller/http-server-ingress-controller

But strangely enough, no httpserver resource was created, Here's what I did to get into the easegress pod

root@cp01:~# kubectl exec -it easegress-7c47dfd8b4-97wlw -- /bin/sh
/opt/easegress/log # egctl get all
NAME                            KIND                            AGE
RawConfigTrafficController      RawConfigTrafficController      unknown
ServiceRegistry                 ServiceRegistry                 unknown
StatusSyncController            StatusSyncController            unknown
TrafficController               TrafficController               unknown
ingress-controller-example      IngressController               unknown

NAME                            ROLE            AGE     STATE   API-ADDR        HEARTBEAT
easegress-7c47dfd8b4-97wlw      primary         6m      Leader  <IP_ADDRESS>:2381    4s ago

NAME    ID-FIELD        JSON-SCHEMA     DATA-NUM

But I've confirmed that ConfigMap easegress-cm has a configuration for httpserver in its contents
root@cp01:~# kubectl describe configmap easegress-cm
Name:         easegress-cm
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
controller.yaml:
----
kind: IngressController
name: ingress-controller-example
kubeConfig:
masterURL:
namespaces: ["default"]
ingressClass: easegress
httpServer:
  port: 8080
  https: false
  keepAlive: true
  keepAliveTimeout: 60s
  maxConnections: 10240

easegress-server.yaml:
----
name: ingress-easegress
cluster-name: easegress-ingress-controller
cluster-role: primary
api-addr: <IP_ADDRESS>:2381
data-dir: /opt/easegress/data
log-dir: /opt/easegress/log
debug: false

BinaryData
====

Events:  <none>

2024-02-06T06:58:08.176Z        INFO    trafficcontroller/trafficcontroller.go:283      create traffic gate ingress-controller-example/ingresscontroller/http-server-ingress-controller

It was created. We just support get/describe traffic gates for different namespaces[1], which will be in next release. But for now, you can use egctl describe TrafficController  TrafficController  to get the spec of HTTPServer of IngressController.
And I was reckoning that your manual installation is not completed. You could use helm[2] to install Ingress Controller with specifying image.tag=v1.7.0.
[1] https://github.com/easegress-io/easegress/pull/1197
[2] https://github.com/easegress-io/easegress/blob/main/helm-charts/ingress-controller/README.md

Thanks, I've been on vacation since the Lunar New Year is coming up and I can't access the server, I'll try again after fixing my vacation.
Happy New Year!

Sure, please give us feedback if it's still not working.

I just returned to work yesterday and have been very busy at work and haven't had a chance to look into it yet, give me a moment.....

Sure, please give us feedback if you have any issues.

I'm sorry, I've been so busy lately that I haven't had the time to study the methods you've provided, I'll definitely test them out as soon as I'm free after a while!

@kursk-ye  Hi, we've released v2.7.2 to address a bug in Ingress Controller, please upgrade Easegress and check it out.

@kursk-ye Hi, we've released v2.7.2 to address a bug in Ingress Controller, please upgrade Easegress and check it out.

ok，I try it

Thank you very much, it worked!
I used the 2.7.2 source code, rebuilt the image for arm64 architecture, and after redeploying easegress and service, the experiment worked!
root@cp01:~/easegress/build/package# kcdd easegress
Name:                   easegress
Namespace:              default
CreationTimestamp:      Thu, 14 Mar 2024 02:22:45 +0000
Labels:                 app=easegress-ingress
Annotations:            deployment.kubernetes.io/revision: 1
Selector:               app=easegress-ingress
Replicas:               1 desired | 1 updated | 1 total | 1 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:           app=easegress-ingress
  Service Account:  easegress-ingress-controller
  Containers:
   easegress-primary:
    Image:      privatehub:5000/arm_easegress:2.7.2
    Port:       <none>
    Host Port:  <none>
    Command:
      /bin/sh
    Args:
      -c
      /opt/easegress/bin/easegress-server \
        -f /opt/eg-config/easegress-server.yaml \
        --initial-object-config-files /opt/eg-config/controller.yaml \
        --initial-cluster $(EG_NAME)=http://localhost:2380
    Limits:
      cpu:     1200m
      memory:  2Gi
    Requests:
      cpu:     100m
      memory:  256Mi
    Environment:
      EG_NAME:   (v1:metadata.name)
    Mounts:
      /opt/easegress/data from ingress-data-volume (rw)
      /opt/easegress/log from ingress-data-volume (rw)
      /opt/eg-config/controller.yaml from easegress-cm (rw,path="controller.yaml")
      /opt/eg-config/easegress-server.yaml from easegress-cm (rw,path="easegress-server.yaml")
  Volumes:
   ingress-data-volume:
    Type:       EmptyDir (a temporary directory that shares a pod's lifetime)
    Medium:
    SizeLimit:  <unset>
   easegress-cm:
    Type:      ConfigMap (a volume populated by a ConfigMap)
    Name:      easegress-cm
    Optional:  false
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    NewReplicaSetAvailable
OldReplicaSets:  <none>
NewReplicaSet:   easegress-54cb6c4d94 (1/1 replicas created)
Events:
  Type    Reason             Age   From                   Message
  ----    ------             ----  ----                   -------
  Normal  ScalingReplicaSet  40s   deployment-controller  Scaled up replica set easegress-54cb6c4d94 to 1

root@cp01:~/easegress/build/package# kcds hello-service
Name:                     hello-service
Namespace:                default
Labels:                   <none>
Annotations:              <none>
Selector:                 app=products,department=sales
Type:                     NodePort
IP Family Policy:         SingleStack
IP Families:              IPv4
IP:                       <IP_ADDRESS>
IPs:                      <IP_ADDRESS>
Port:                     port-v1  39090/TCP
TargetPort:               9090/TCP
NodePort:                 port-v1  30281/TCP
Endpoints:                <IP_ADDRESS>:9090,<IP_ADDRESS>:9090
Port:                     port-v2  49191/TCP
TargetPort:               9191/TCP
NodePort:                 port-v2  31381/TCP
Endpoints:                <IP_ADDRESS>:9191,<IP_ADDRESS>:9191
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

root@cp01:~/easegress/build/package# kubectl describe ingress
Name:             ingress-example
Labels:           <none>
Namespace:        default
Address:
Ingress Class:    easegress
Default backend:  <default>
Rules:
  Host             Path  Backends
  ----             ----  --------
  www.example.com
                   /   hello-service:39090 (<IP_ADDRESS>:9090,<IP_ADDRESS>:9090)
  *.megaease.com
                   /   hello-service:49191 (<IP_ADDRESS>:9191,<IP_ADDRESS>:9191)
Annotations:       <none>
Events:            <none>

root@cp01:~/easegress/build/package# kcgs
NAME               TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                           AGE   SELECTOR
easegress-public   NodePort    <IP_ADDRESS>    <none>        8080:30080/TCP                    6s    app=easegress-ingress
hello-service      NodePort    <IP_ADDRESS>   <none>        39090:30281/TCP,49191:31381/TCP   40d   app=products,department=sales
kubernetes         ClusterIP   <IP_ADDRESS>       <none>        443/TCP                           52d   <none>

root@cp01:~/easegress/build/package# curl http://<IP_ADDRESS>:8080/ -HHost:www.example.com    IP Address: <IP_ADDRESS>
Port 9090
Welcome to Kursk
root@cp01:~/easegress/build/package#
root@cp01:~/easegress/build/package#
root@cp01:~/easegress/build/package# curl http://<IP_ADDRESS>:8080/ -HHost:www.megaease.com
IP Address: <IP_ADDRESS>
Port 9191
Welcome to Kursk

Thanks to the help of the easegress team, I wrote a wechat article about the experimental procedure
https://mp.weixin.qq.com/s?__biz=Mzg3OTYwMTE1NA==&mid=2247484007&idx=1&sn=1a1fa804c9831eaa5b9fc3ea720191e1&chksm=cf00b10af877381c2b589033a2fce713a773c7b78dab614592e4052cb1da25d471639fd82d9b&token=385145902&lang=zh_CN#rd

I recently redid the experiment using 2.7.3 and had the same hang problem I had last time, The procedure is exactly the same
curl -L -v http://<IP_ADDRESS>:8080
*   Trying <IP_ADDRESS>:8080...
* connect to <IP_ADDRESS> port 8080 failed: Connection timed out
* Failed to connect to <IP_ADDRESS> port 8080 after 129001 ms: Connection timed out
* Closing connection 0

I went into the container to check and found the problem, easegress was not listening on port 8080 for ipv4, but only on port 8080 for ipv6
/opt/easegress # netstat -tulnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 <IP_ADDRESS>:2379          <IP_ADDRESS>:*               LISTEN      1/easegress-server
tcp        0      0 <IP_ADDRESS>:2380          <IP_ADDRESS>:*               LISTEN      1/easegress-server
tcp6       0      0 :::2381                 :::*                    LISTEN      1/easegress-server
tcp6       0      0 :::8080                 :::*                    LISTEN      1/easegress-server     # only on ipv6 not ipv4

/opt/easegress # egctl get all
NAME                            KIND                            AGE
RawConfigTrafficController      RawConfigTrafficController      unknown
ServiceRegistry                 ServiceRegistry                 unknown
StatusSyncController            StatusSyncController            unknown
TrafficController               TrafficController               unknown
ingress-controller-example      IngressController               unknown

/opt/easegress # egctl describe IngressController ingress-controller-example
=====================
In Namespace default:
=====================
Name: ingress-controller-example
Kind: IngressController
Version: easegress.megaease.com/v2

HttpServer:
===========
  https: false
  keepAlive: true
  keepAliveTimeout: 60s
  maxConnections: 10240
  port: 8080
IngressClass: easegress
Namespaces: - default

AllStatus:
==========
  - node: easegress-7547b89854-dm54s
    status:
      timestamp: 1.73052326e+09

/opt/easegress # ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1480
        inet <IP_ADDRESS>  netmask <IP_ADDRESS>  broadcast <IP_ADDRESS>
        inet6 fe80::14ec:b4ff:fe10:ef4a  prefixlen 64  scopeid 0x20<link>
        ether 16:ec:b4:10:ef:4a  txqueuelen 1000  (Ethernet)
        RX packets 2820  bytes 3252185 (3.1 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2092  bytes 152073 (148.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet <IP_ADDRESS>  netmask <IP_ADDRESS>
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 17858  bytes 4033624 (3.8 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 17858  bytes 4033624 (3.8 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

The config file is the same as before, but I'll re-post it anyway
echo '
apiVersion: v1
kind: ConfigMap
metadata:
  name: easegress-cm
  namespace: default
data:
  easegress-server.yaml: |
    name: ingress-easegress
    cluster-name: easegress-ingress-controller
    cluster-role: primary
    api-addr: <IP_ADDRESS>:2381
    data-dir: /opt/easegress/data
    log-dir: /opt/easegress/log
    debug: true
  controller.yaml: |
    kind: IngressController
    name: ingress-controller-example
    kubeConfig:
    masterURL:
    namespaces: ["default"]
    ingressClass: easegress
    httpServer:
      port: 8080
      https: false
      keepAlive: true
      keepAliveTimeout: 60s
      maxConnections: 10240' | kubectl apply -f -

How to let easegress to listen to ipv4 as well

stdout.log as follow
2024-11-02T04:06:01.815Z	INFO	cmd/server.go:61	Easegress release: UNKNOWN, repo: UNKNOWN, commit: UNKNOWN
2024-11-02T04:06:01.817Z	INFO	cluster/config.go:110	etcd config: advertise-client-urls: [{Scheme:http Opaque: User: Host:localhost:2379 Path: RawPath: OmitHost:false ForceQuery:false RawQuery: Fragment: RawFragment:}] advertise-peer-urls: [{Scheme:http Opaque: User: Host:localhost:2380 Path: RawPath: OmitHost:false ForceQuery:false RawQuery: Fragment: RawFragment:}] init-cluster: easegress-7547b89854-dm54s=http://localhost:2380 cluster-state: new force-new-cluster: false
2024-11-02T04:06:02.878Z	INFO	cluster/cluster.go:314	client connect with endpoints: [http://localhost:2380]
2024-11-02T04:06:02.88Z	INFO	cluster/cluster.go:328	client is ready
2024-11-02T04:06:02.892Z	INFO	cluster/cluster.go:620	server is ready
2024-11-02T04:06:02.909Z	INFO	cluster/cluster.go:480	lease is ready (grant new one: 67db92eb0d2b8f07)
2024-11-02T04:06:02.909Z	INFO	cluster/cluster.go:208	cluster is ready
2024-11-02T04:06:02.958Z	INFO	supervisor/supervisor.go:140	create TrafficController
2024-11-02T04:06:02.959Z	DEBUG	cluster/syncer.go:83	watcher created for key /config/objects/ (prefix: true)
2024-11-02T04:06:02.976Z	INFO	supervisor/supervisor.go:140	create RawConfigTrafficController
2024-11-02T04:06:02.989Z	INFO	supervisor/supervisor.go:140	create ServiceRegistry
2024-11-02T04:06:03.001Z	INFO	supervisor/supervisor.go:140	create StatusSyncController
2024-11-02T04:06:03.001Z	INFO	statussynccontroller/statussynccontroller.go:172	StatusUpdateMaxBatchSize is 20
2024-11-02T04:06:03.01Z	INFO	cluster/cluster.go:520	session is ready
2024-11-02T04:06:03.01Z	INFO	supervisor/supervisor.go:213	create ingress-controller-example
2024-11-02T04:06:03.012Z	INFO	api/api.go:76	register api group admin
2024-11-02T04:06:03.013Z	INFO	supervisor/supervisor.go:201	update TrafficController
2024-11-02T04:06:03.013Z	INFO	supervisor/supervisor.go:201	update RawConfigTrafficController
2024-11-02T04:06:03.013Z	INFO	supervisor/supervisor.go:201	update ServiceRegistry
2024-11-02T04:06:03.024Z	INFO	api/server.go:109	api server running in <IP_ADDRESS>:2381
2024-11-02T04:06:03.044Z	INFO	supervisor/supervisor.go:201	update StatusSyncController
2024-11-02T04:06:03.044Z	INFO	statussynccontroller/statussynccontroller.go:172	StatusUpdateMaxBatchSize is 20
2024-11-02T04:06:03.092Z	INFO	ingresscontroller/ingresscontroller.go:150	successfully connect to kubernetes
2024-11-02T04:06:03.193Z	INFO	ingresscontroller/ingresscontroller.go:170	successfully watched ingress related resources
2024-11-02T04:06:03.193Z	DEBUG	ingresscontroller/ingresscontroller.go:208	begin translate kubernetes ingress to easegress configuration
2024-11-02T04:06:03.304Z	DEBUG	ingresscontroller/ingresscontroller.go:215	end translate kubernetes ingress to easegress configuration
2024-11-02T04:06:03.304Z	INFO	trafficcontroller/trafficcontroller.go:507	create namespace ingress-controller-example/ingresscontroller
2024-11-02T04:06:03.307Z	INFO	prometheushelper/helper.go:70	[prometheus_helper] Counter <proxy_total_connections> is created!
2024-11-02T04:06:03.307Z	INFO	prometheushelper/helper.go:70	[prometheus_helper] Counter <proxy_total_error_connections> is created!
2024-11-02T04:06:03.307Z	INFO	prometheushelper/helper.go:123	[prometheus_helper] Histogram <proxy_request_body_size> already created!
2024-11-02T04:06:03.308Z	INFO	prometheushelper/helper.go:123	[prometheus_helper] Histogram <proxy_response_body_size> already created!
2024-11-02T04:06:03.308Z	INFO	prometheushelper/helper.go:148	[prometheus_helper] Summary <proxy_request_body_size_percentage> already created!
2024-11-02T04:06:03.308Z	INFO	prometheushelper/helper.go:148	[prometheus_helper] Summary <proxy_response_body_size_percentage> already created!
2024-11-02T04:06:03.308Z	INFO	trafficcontroller/trafficcontroller.go:517	create pipeline ingress-controller-example/ingresscontroller/pipeline-default-hello-service-39090
2024-11-02T04:06:03.311Z	DEBUG	prometheushelper/helper.go:57	[prometheus_helper] Counter <proxy_total_connections> already created!
2024-11-02T04:06:03.311Z	DEBUG	prometheushelper/helper.go:57	[prometheus_helper] Counter <proxy_total_error_connections> already created!
2024-11-02T04:06:03.311Z	DEBUG	prometheushelper/helper.go:114	[prometheus_helper] Histogram <proxy_request_body_size> already created!
2024-11-02T04:06:03.312Z	DEBUG	prometheushelper/helper.go:114	[prometheus_helper] Histogram <proxy_response_body_size> already created!
2024-11-02T04:06:03.312Z	DEBUG	prometheushelper/helper.go:139	[prometheus_helper] Summary <proxy_request_body_size_percentage> already created!
2024-11-02T04:06:03.312Z	DEBUG	prometheushelper/helper.go:139	[prometheus_helper] Summary <proxy_response_body_size_percentage> already created!
2024-11-02T04:06:03.312Z	INFO	trafficcontroller/trafficcontroller.go:517	create pipeline ingress-controller-example/ingresscontroller/pipeline-default-hello-service-49191
2024-11-02T04:06:03.312Z	DEBUG	ingresscontroller/ingresscontroller.go:224	pipelines updated
2024-11-02T04:06:03.313Z	INFO	prometheushelper/helper.go:98	[prometheus_helper] Gauge <httpserver_health> is created!
2024-11-02T04:06:03.313Z	INFO	prometheushelper/helper.go:70	[prometheus_helper] Counter <httpserver_total_requests> is created!
2024-11-02T04:06:03.313Z	INFO	prometheushelper/helper.go:70	[prometheus_helper] Counter <httpserver_total_responses> is created!
2024-11-02T04:06:03.313Z	INFO	prometheushelper/helper.go:70	[prometheus_helper] Counter <httpserver_total_error_requests> is created!
2024-11-02T04:06:03.314Z	INFO	prometheushelper/helper.go:123	[prometheus_helper] Histogram <httpserver_requests_duration> already created!
2024-11-02T04:06:03.314Z	INFO	prometheushelper/helper.go:123	[prometheus_helper] Histogram <httpserver_requests_size_bytes> already created!
2024-11-02T04:06:03.314Z	INFO	prometheushelper/helper.go:123	[prometheus_helper] Histogram <httpserver_responses_size_bytes> already created!
2024-11-02T04:06:03.314Z	INFO	prometheushelper/helper.go:148	[prometheus_helper] Summary <httpserver_requests_duration_percentage> already created!
2024-11-02T04:06:03.314Z	INFO	prometheushelper/helper.go:148	[prometheus_helper] Summary <httpserver_requests_size_bytes_percentage> already created!
2024-11-02T04:06:03.315Z	INFO	prometheushelper/helper.go:148	[prometheus_helper] Summary <httpserver_responses_size_bytes_percentage> already created!
2024-11-02T04:06:03.315Z	INFO	prometheushelper/helper.go:98	[prometheus_helper] Gauge <httpserver_m1> is created!
2024-11-02T04:06:03.315Z	INFO	prometheushelper/helper.go:98	[prometheus_helper] Gauge <httpserver_m5> is created!
2024-11-02T04:06:03.315Z	INFO	prometheushelper/helper.go:98	[prometheus_helper] Gauge <httpserver_m15> is created!
2024-11-02T04:06:03.315Z	INFO	prometheushelper/helper.go:98	[prometheus_helper] Gauge <httpserver_m1_err> is created!
2024-11-02T04:06:03.315Z	INFO	prometheushelper/helper.go:98	[prometheus_helper] Gauge <httpserver_m5_err> is created!
2024-11-02T04:06:03.316Z	INFO	prometheushelper/helper.go:98	[prometheus_helper] Gauge <httpserver_m15_err> is created!
2024-11-02T04:06:03.316Z	INFO	prometheushelper/helper.go:98	[prometheus_helper] Gauge <httpserver_m1_err_percent> is created!
2024-11-02T04:06:03.316Z	INFO	prometheushelper/helper.go:98	[prometheus_helper] Gauge <httpserver_m5_err_percent> is created!
2024-11-02T04:06:03.316Z	INFO	prometheushelper/helper.go:98	[prometheus_helper] Gauge <httpserver_m15_err_percent> is created!
2024-11-02T04:06:03.316Z	INFO	prometheushelper/helper.go:98	[prometheus_helper] Gauge <httpserver_min> is created!
2024-11-02T04:06:03.317Z	INFO	prometheushelper/helper.go:98	[prometheus_helper] Gauge <httpserver_max> is created!
2024-11-02T04:06:03.317Z	INFO	prometheushelper/helper.go:98	[prometheus_helper] Gauge <httpserver_mean> is created!
2024-11-02T04:06:03.317Z	INFO	prometheushelper/helper.go:98	[prometheus_helper] Gauge <httpserver_p25> is created!
2024-11-02T04:06:03.317Z	INFO	prometheushelper/helper.go:98	[prometheus_helper] Gauge <httpserver_p50> is created!
2024-11-02T04:06:03.317Z	INFO	prometheushelper/helper.go:98	[prometheus_helper] Gauge <httpserver_p75> is created!
2024-11-02T04:06:03.317Z	INFO	prometheushelper/helper.go:98	[prometheus_helper] Gauge <httpserver_p95> is created!
2024-11-02T04:06:03.318Z	INFO	prometheushelper/helper.go:98	[prometheus_helper] Gauge <httpserver_p98> is created!
2024-11-02T04:06:03.318Z	INFO	prometheushelper/helper.go:98	[prometheus_helper] Gauge <httpserver_p99> is created!
2024-11-02T04:06:03.318Z	INFO	prometheushelper/helper.go:98	[prometheus_helper] Gauge <httpserver_p999> is created!
2024-11-02T04:06:03.318Z	INFO	prometheushelper/helper.go:98	[prometheus_helper] Gauge <httpserver_req_size> is created!
2024-11-02T04:06:03.318Z	INFO	prometheushelper/helper.go:98	[prometheus_helper] Gauge <httpserver_resp_size> is created!
2024-11-02T04:06:03.319Z	INFO	trafficcontroller/trafficcontroller.go:283	create traffic gate ingress-controller-example/ingresscontroller/http-server-ingress-controller
2024-11-02T04:06:03.319Z	DEBUG	ingresscontroller/ingresscontroller.go:231	http server updated
2024-11-02T05:06:02.939Z	INFO	cluster/cluster.go:688	defrag successfully
2024-11-02T05:20:02.904Z	INFO	cmd/server.go:61	Easegress release: UNKNOWN, repo: UNKNOWN, commit: UNKNOWN
2024-11-02T05:20:02.918Z	INFO	cluster/config.go:110	etcd config: advertise-client-urls: [{Scheme:http Opaque: User: Host:localhost:2379 Path: RawPath: OmitHost:false ForceQuery:false RawQuery: Fragment: RawFragment:}] advertise-peer-urls: [{Scheme:http Opaque: User: Host:localhost:2380 Path: RawPath: OmitHost:false ForceQuery:false RawQuery: Fragment: RawFragment:}] init-cluster: easegress-7547b89854-dm54s=http://localhost:2380 cluster-state: new force-new-cluster: false
2024-11-02T05:20:04.959Z	INFO	cluster/cluster.go:314	client connect with endpoints: [http://localhost:2380]
2024-11-02T05:20:04.972Z	INFO	cluster/cluster.go:328	client is ready
2024-11-02T05:20:04.983Z	INFO	cluster/cluster.go:620	server is ready
2024-11-02T05:20:04.988Z	INFO	cluster/cluster.go:433	lease is ready(use existed one: 67db92eb0d2b8f07)
2024-11-02T05:20:04.988Z	INFO	cluster/cluster.go:208	cluster is ready
2024-11-02T05:20:05.034Z	INFO	supervisor/object.go:133	initial object ingress-controller-example already exist in config, skip
2024-11-02T05:20:05.06Z	INFO	supervisor/supervisor.go:140	create TrafficController
2024-11-02T05:20:05.079Z	INFO	supervisor/supervisor.go:140	create RawConfigTrafficController
2024-11-02T05:20:05.081Z	DEBUG	cluster/syncer.go:83	watcher created for key /config/objects/ (prefix: true)
2024-11-02T05:20:05.085Z	INFO	supervisor/supervisor.go:140	create ServiceRegistry
2024-11-02T05:20:05.09Z	INFO	supervisor/supervisor.go:140	create StatusSyncController
2024-11-02T05:20:05.093Z	INFO	statussynccontroller/statussynccontroller.go:172	StatusUpdateMaxBatchSize is 20
2024-11-02T05:20:05.1Z	INFO	cluster/cluster.go:520	session is ready
2024-11-02T05:20:05.1Z	INFO	supervisor/supervisor.go:201	update RawConfigTrafficController
2024-11-02T05:20:05.1Z	INFO	supervisor/supervisor.go:201	update ServiceRegistry
2024-11-02T05:20:05.1Z	INFO	supervisor/supervisor.go:201	update StatusSyncController
2024-11-02T05:20:05.1Z	INFO	api/api.go:76	register api group admin
2024-11-02T05:20:05.1Z	INFO	statussynccontroller/statussynccontroller.go:172	StatusUpdateMaxBatchSize is 20
2024-11-02T05:20:05.1Z	INFO	supervisor/supervisor.go:201	update TrafficController
2024-11-02T05:20:05.1Z	INFO	supervisor/supervisor.go:213	create ingress-controller-example
2024-11-02T05:20:05.101Z	INFO	api/server.go:109	api server running in <IP_ADDRESS>:2381
2024-11-02T05:20:20.666Z	INFO	ingresscontroller/ingresscontroller.go:150	successfully connect to kubernetes
2024-11-02T05:20:20.986Z	INFO	ingresscontroller/ingresscontroller.go:170	successfully watched ingress related resources
2024-11-02T05:20:20.986Z	DEBUG	ingresscontroller/ingresscontroller.go:208	begin translate kubernetes ingress to easegress configuration
2024-11-02T05:20:21.068Z	DEBUG	ingresscontroller/ingresscontroller.go:215	end translate kubernetes ingress to easegress configuration
2024-11-02T05:20:21.068Z	INFO	trafficcontroller/trafficcontroller.go:507	create namespace ingress-controller-example/ingresscontroller
2024-11-02T05:20:21.07Z	INFO	prometheushelper/helper.go:70	[prometheus_helper] Counter <proxy_total_connections> is created!
2024-11-02T05:20:21.077Z	INFO	prometheushelper/helper.go:70	[prometheus_helper] Counter <proxy_total_error_connections> is created!
2024-11-02T05:20:21.077Z	INFO	prometheushelper/helper.go:123	[prometheus_helper] Histogram <proxy_request_body_size> already created!
2024-11-02T05:20:21.077Z	INFO	prometheushelper/helper.go:123	[prometheus_helper] Histogram <proxy_response_body_size> already created!
2024-11-02T05:20:21.078Z	INFO	prometheushelper/helper.go:148	[prometheus_helper] Summary <proxy_request_body_size_percentage> already created!
2024-11-02T05:20:21.078Z	INFO	prometheushelper/helper.go:148	[prometheus_helper] Summary <proxy_response_body_size_percentage> already created!
2024-11-02T05:20:21.078Z	INFO	trafficcontroller/trafficcontroller.go:517	create pipeline ingress-controller-example/ingresscontroller/pipeline-default-hello-service-49191
2024-11-02T05:20:21.08Z	DEBUG	prometheushelper/helper.go:57	[prometheus_helper] Counter <proxy_total_connections> already created!
2024-11-02T05:20:21.08Z	DEBUG	prometheushelper/helper.go:57	[prometheus_helper] Counter <proxy_total_error_connections> already created!
2024-11-02T05:20:21.08Z	DEBUG	prometheushelper/helper.go:114	[prometheus_helper] Histogram <proxy_request_body_size> already created!
2024-11-02T05:20:21.08Z	DEBUG	prometheushelper/helper.go:114	[prometheus_helper] Histogram <proxy_response_body_size> already created!
2024-11-02T05:20:21.081Z	DEBUG	prometheushelper/helper.go:139	[prometheus_helper] Summary <proxy_request_body_size_percentage> already created!
2024-11-02T05:20:21.081Z	DEBUG	prometheushelper/helper.go:139	[prometheus_helper] Summary <proxy_response_body_size_percentage> already created!
2024-11-02T05:20:21.081Z	INFO	trafficcontroller/trafficcontroller.go:517	create pipeline ingress-controller-example/ingresscontroller/pipeline-default-hello-service-39090
2024-11-02T05:20:21.081Z	DEBUG	ingresscontroller/ingresscontroller.go:224	pipelines updated
2024-11-02T05:20:21.081Z	INFO	prometheushelper/helper.go:98	[prometheus_helper] Gauge <httpserver_health> is created!
2024-11-02T05:20:21.081Z	INFO	prometheushelper/helper.go:70	[prometheus_helper] Counter <httpserver_total_requests> is created!
2024-11-02T05:20:21.082Z	INFO	prometheushelper/helper.go:70	[prometheus_helper] Counter <httpserver_total_responses> is created!
2024-11-02T05:20:21.082Z	INFO	prometheushelper/helper.go:70	[prometheus_helper] Counter <httpserver_total_error_requests> is created!
2024-11-02T05:20:21.082Z	INFO	prometheushelper/helper.go:123	[prometheus_helper] Histogram <httpserver_requests_duration> already created!
2024-11-02T05:20:21.082Z	INFO	prometheushelper/helper.go:123	[prometheus_helper] Histogram <httpserver_requests_size_bytes> already created!
2024-11-02T05:20:21.082Z	INFO	prometheushelper/helper.go:123	[prometheus_helper] Histogram <httpserver_responses_size_bytes> already created!
2024-11-02T05:20:21.082Z	INFO	prometheushelper/helper.go:148	[prometheus_helper] Summary <httpserver_requests_duration_percentage> already created!
2024-11-02T05:20:21.083Z	INFO	prometheushelper/helper.go:148	[prometheus_helper] Summary <httpserver_requests_size_bytes_percentage> already created!
2024-11-02T05:20:21.083Z	INFO	prometheushelper/helper.go:148	[prometheus_helper] Summary <httpserver_responses_size_bytes_percentage> already created!
2024-11-02T05:20:21.083Z	INFO	prometheushelper/helper.go:98	[prometheus_helper] Gauge <httpserver_m1> is created!
2024-11-02T05:20:21.083Z	INFO	prometheushelper/helper.go:98	[prometheus_helper] Gauge <httpserver_m5> is created!
2024-11-02T05:20:21.083Z	INFO	prometheushelper/helper.go:98	[prometheus_helper] Gauge <httpserver_m15> is created!
2024-11-02T05:20:21.083Z	INFO	prometheushelper/helper.go:98	[prometheus_helper] Gauge <httpserver_m1_err> is created!
2024-11-02T05:20:21.084Z	INFO	prometheushelper/helper.go:98	[prometheus_helper] Gauge <httpserver_m5_err> is created!
2024-11-02T05:20:21.084Z	INFO	prometheushelper/helper.go:98	[prometheus_helper] Gauge <httpserver_m15_err> is created!
2024-11-02T05:20:21.084Z	INFO	prometheushelper/helper.go:98	[prometheus_helper] Gauge <httpserver_m1_err_percent> is created!
2024-11-02T05:20:21.084Z	INFO	prometheushelper/helper.go:98	[prometheus_helper] Gauge <httpserver_m5_err_percent> is created!
2024-11-02T05:20:21.084Z	INFO	prometheushelper/helper.go:98	[prometheus_helper] Gauge <httpserver_m15_err_percent> is created!
2024-11-02T05:20:21.084Z	INFO	prometheushelper/helper.go:98	[prometheus_helper] Gauge <httpserver_min> is created!
2024-11-02T05:20:21.084Z	INFO	prometheushelper/helper.go:98	[prometheus_helper] Gauge <httpserver_max> is created!
2024-11-02T05:20:21.085Z	INFO	prometheushelper/helper.go:98	[prometheus_helper] Gauge <httpserver_mean> is created!
2024-11-02T05:20:21.085Z	INFO	prometheushelper/helper.go:98	[prometheus_helper] Gauge <httpserver_p25> is created!
2024-11-02T05:20:21.085Z	INFO	prometheushelper/helper.go:98	[prometheus_helper] Gauge <httpserver_p50> is created!
2024-11-02T05:20:21.085Z	INFO	prometheushelper/helper.go:98	[prometheus_helper] Gauge <httpserver_p75> is created!
2024-11-02T05:20:21.085Z	INFO	prometheushelper/helper.go:98	[prometheus_helper] Gauge <httpserver_p95> is created!
2024-11-02T05:20:21.085Z	INFO	prometheushelper/helper.go:98	[prometheus_helper] Gauge <httpserver_p98> is created!
2024-11-02T05:20:21.085Z	INFO	prometheushelper/helper.go:98	[prometheus_helper] Gauge <httpserver_p99> is created!
2024-11-02T05:20:21.085Z	INFO	prometheushelper/helper.go:98	[prometheus_helper] Gauge <httpserver_p999> is created!
2024-11-02T05:20:21.086Z	INFO	prometheushelper/helper.go:98	[prometheus_helper] Gauge <httpserver_req_size> is created!
2024-11-02T05:20:21.086Z	INFO	prometheushelper/helper.go:98	[prometheus_helper] Gauge <httpserver_resp_size> is created!
2024-11-02T05:20:21.086Z	INFO	trafficcontroller/trafficcontroller.go:283	create traffic gate ingress-controller-example/ingresscontroller/http-server-ingress-controller
2024-11-02T05:20:21.086Z	DEBUG	ingresscontroller/ingresscontroller.go:231	http server updated
2024-11-02T05:20:21.871Z	DEBUG	ingresscontroller/ingresscontroller.go:208	begin translate kubernetes ingress to easegress configuration
2024-11-02T05:20:21.884Z	DEBUG	ingresscontroller/ingresscontroller.go:215	end translate kubernetes ingress to easegress configuration
2024-11-02T05:20:21.887Z	DEBUG	prometheushelper/helper.go:57	[prometheus_helper] Counter <proxy_total_connections> already created!
2024-11-02T05:20:21.887Z	DEBUG	prometheushelper/helper.go:57	[prometheus_helper] Counter <proxy_total_error_connections> already created!
2024-11-02T05:20:21.887Z	DEBUG	prometheushelper/helper.go:114	[prometheus_helper] Histogram <proxy_request_body_size> already created!
2024-11-02T05:20:21.887Z	DEBUG	prometheushelper/helper.go:114	[prometheus_helper] Histogram <proxy_response_body_size> already created!
2024-11-02T05:20:21.887Z	DEBUG	prometheushelper/helper.go:139	[prometheus_helper] Summary <proxy_request_body_size_percentage> already created!
2024-11-02T05:20:21.888Z	DEBUG	prometheushelper/helper.go:139	[prometheus_helper] Summary <proxy_response_body_size_percentage> already created!
2024-11-02T05:20:21.888Z	INFO	trafficcontroller/trafficcontroller.go:528	update pipeline ingress-controller-example/ingresscontroller/pipeline-default-hello-service-39090
2024-11-02T05:20:21.89Z	DEBUG	prometheushelper/helper.go:57	[prometheus_helper] Counter <proxy_total_connections> already created!
2024-11-02T05:20:21.891Z	DEBUG	prometheushelper/helper.go:57	[prometheus_helper] Counter <proxy_total_error_connections> already created!
2024-11-02T05:20:21.891Z	DEBUG	prometheushelper/helper.go:114	[prometheus_helper] Histogram <proxy_request_body_size> already created!
2024-11-02T05:20:21.891Z	DEBUG	prometheushelper/helper.go:114	[prometheus_helper] Histogram <proxy_response_body_size> already created!
2024-11-02T05:20:21.891Z	DEBUG	prometheushelper/helper.go:139	[prometheus_helper] Summary <proxy_request_body_size_percentage> already created!
2024-11-02T05:20:21.891Z	DEBUG	prometheushelper/helper.go:139	[prometheus_helper] Summary <proxy_response_body_size_percentage> already created!
2024-11-02T05:20:21.891Z	INFO	trafficcontroller/trafficcontroller.go:528	update pipeline ingress-controller-example/ingresscontroller/pipeline-default-hello-service-49191
2024-11-02T05:20:21.891Z	DEBUG	ingresscontroller/ingresscontroller.go:224	pipelines updated
2024-11-02T05:20:21.892Z	INFO	trafficcontroller/trafficcontroller.go:287	traffic gate ingress-controller-example/ingresscontroller/http-server-ingress-controller nothing change
2024-11-02T05:20:21.892Z	DEBUG	ingresscontroller/ingresscontroller.go:231	http server updated
2024-11-02T06:20:05.084Z	INFO	cluster/cluster.go:688	defrag successfully
2024-11-02T07:20:05.116Z	INFO	cluster/cluster.go:688	defrag successfully
2024-11-02T08:20:05.147Z	INFO	cluster/cluster.go:688	defrag successfully
2024-11-02T09:20:05.219Z	INFO	cluster/cluster.go:688	defrag successfully
2024-11-02T10:20:05.275Z	INFO	cluster/cluster.go:688	defrag successfully
2024-11-02T11:20:05.341Z	INFO	cluster/cluster.go:688	defrag successfully
2024-11-02T12:20:05.371Z	INFO	cluster/cluster.go:688	defrag successfully
2024-11-02T13:20:05.404Z	INFO	cluster/cluster.go:688	defrag successfully
2024-11-02T14:20:05.439Z	INFO	cluster/cluster.go:688	defrag successfully
2024-11-02T15:20:05.513Z	INFO	cluster/cluster.go:688	defrag successfully
2024-11-02T16:20:05.562Z	INFO	cluster/cluster.go:688	defrag successfully
2024-11-02T17:20:05.594Z	INFO	cluster/cluster.go:688	defrag successfully
2024-11-02T18:20:05.626Z	INFO	cluster/cluster.go:688	defrag successfully
2024-11-02T19:20:05.678Z	INFO	cluster/cluster.go:688	defrag successfully
2024-11-02T20:20:05.758Z	INFO	cluster/cluster.go:688	defrag successfully
2024-11-02T21:20:05.806Z	INFO	cluster/cluster.go:688	defrag successfully
2024-11-02T22:20:05.873Z	INFO	cluster/cluster.go:688	defrag successfully
2024-11-02T23:20:05.926Z	INFO	cluster/cluster.go:688	defrag successfully

Hey, tcp6 doesn't mean anything on the newer Linux version. I am wondering if you have created the Service for the port on 8080. Can you try the curl 8080 inside the Easegress pod. If the curl works inside the pod, which leads to that the problem may lay down on the K8s config stuff.

o, sorry, I didn't realize before that Linux has dual stacks on this technology
I finally realized that the problem is that on the K8S cluster , the easegress pod is located on node wn03, but this wn03 node can't properly access the nginx pod located on wn02
curl -L http://<IP_ADDRESS>:9090
curl: (28) Failed to connect to <IP_ADDRESS> port 9090 after 129290 ms: Connection timed out

So it's a fault in the K8S cluster itself, I cordon wn03 and migrate easegress to another node that can access the other pods and it works.
I'll have to keep looking into what's wrong with this wn03 node.
thank you very much!

o, sorry, I didn't realize before that Linux has dual stacks on this technology
I finally realized that the problem is that on the K8S cluster , the easegress pod is located on node wn03, but this wn03 node can't properly access the nginx pod located on wn02
curl -L http://<IP_ADDRESS>:9090
curl: (28) Failed to connect to <IP_ADDRESS> port 9090 after 129290 ms: Connection timed out

So it's a fault in the K8S cluster itself, I cordon wn03 and migrate easegress to another node that can access the other pods and it works.
I'll have to keep looking into what's wrong with this wn03 node.
thank you very much!


fixes #13 - duplicate function name

A simple one-line change from fromCol.GoName to getGoName(fromColName). The fromCol is referencing the current db column, but we want the referenced db column name which can be obtained from fromColName. I think the variable name for fromCol might be named wrong but it could be correct as well for how it's used later or before in the code.
But for generating the function name, the name of the other column seems more correct.
Schema used to reproduce the issue and test the fix.
CREATE TABLE public.users (
    id SERIAL PRIMARY KEY,
    username VARCHAR(255) NOT NULL
);
CREATE TABLE public.followers (
    id SERIAL PRIMARY KEY,
    follower_id INT NOT NULL,
    following_id INT NOT NULL,
    FOREIGN KEY (follower_id) REFERENCES public.users(id),
    FOREIGN KEY (following_id) REFERENCES public.users(id)
);

Before Results

After Results

Fixes #13

I don't think that this is the right way. I had thought about it and the problem with this is two fold:

It breaks the forward reference convention.
It breaks the Meaning of the function that was there earlier.

Point 1 is easy to understand and is linked to the point number 2. But what does point 2 state? When the function name is generated, the context is the receiver. Look at the name that was being generated: GetConnectedFollowerListFromDbById. The way you would have called it is like this:
user := mainDb.PublicUserDao.LoadFromDbById(25) // The load function might be something different.

// Trying to get the list of followers:
followers := user.GetConnectedFollowerListFromDbById()

The change you have made would make it look like this:
followers := user.GetConnectedFollowerListFromDbByFollowerId()

In the first call (that was already being generated) the way we are thinking while writing the code is: let's get a list of connected followers by user's ID. And in the second one, we have to think like: let's get a list of connected followers by the follower ID in the followers table matching the user's ID.
In my opinion the second is counter-intuitive.
There is another problem: What if we have another schema (let's call it history schema) where I am linking to the user.id from another table (say past_followers) using the same column name (so the full column name becomes history.past_followers.follower_id). In that case, we will once again get the problem of duplicate function names!
I also realise that it is also a potential problem with current naming convention. But to circumvent that is rather easy and can be covered in an optional setting later. The way I was thinking was: when we generate the reverse references, let's detect it the table is being referenced by another table more than once. If yes, then we change the function name to involve the target table's column names.
So in our case, the table names can be (only if there are two reverse references from the same table): GetConnectedFollowerListFromDbByIdAsFollowerId and GetConnectedFollowerListFromDbByIdAsFollowingId. But this is to be done only when there are multiple reverse references from the same table.

@vaibhav-kaushal I think I misunderstood the problem and the code earlier. I believe what we want to achieve can be done by adding a flag to the function signature for the buildSingleTableRevFkeyFunc function. I have added changes to generate names like GetConnectedFollowerListFromDbByIdAsFollowerId and GetConnectedFollowerListFromDbByIdAsFollowingId if we have multiple foreign keys. Let me know if I'm missing some other implications.

I tested the above changes with the below schema,
CREATE TABLE public.users (
    id SERIAL PRIMARY KEY,
    username VARCHAR(255) NOT NULL
);
CREATE TABLE public.followers (
    id SERIAL PRIMARY KEY,
    follower_id INT NOT NULL,
    following_id INT NOT NULL,
    FOREIGN KEY (follower_id) REFERENCES public.users(id),
    FOREIGN KEY (following_id) REFERENCES public.users(id)
);
CREATE TABLE public.links (
   id SERIAL PRIMARY KEY,
   fk INT NOT NULL,
   FOREIGN KEY (fk1) REFERENCES public.users(id)
);

Sample Results


Add labelAfterField option when rendering

Hi @ljharb
Would you review for this PR? :-)
Thank you ~ 🍺

When was this feature removed?

@ljharb Ah, Sorry.. I was mistaken about feature removed.

@semarketir this looks great! Would you mind also adding this new option to the readme?

@ljharb Ah.. Thank you ~
Okay, I'll add it on the readme :)

@ljharb I've done for it, please check it out :-)

@ljharb I've done, please check it out :-)

@semarketir Can you rebase this down to a single commit? (ideally, with [New] prefixing the commit message

@ljharb Done 🍻

@ljharb Thank you bro ! 🍺


Errors installing strider

On CentOS, using npm version 2.15.6 (latest 2.x) and dependencies installed:
[root@instance-2 ~]# npm install -g strider
npm WARN deprecated<EMAIL_ADDRESS>Jade has been renamed to pug, please install the latest version of pug instead of jade
npm WARN deprecated<EMAIL_ADDRESS>v1.0.0 is a complete rewrite of Swig from the ground up. Previous versions are no longer suppor
ted
npm WARN engine<EMAIL_ADDRESS>wanted: {"node":"0.10.x"} (current: {"node":"6.2.0","npm":"2.15.6"})
npm WARN deprecated<EMAIL_ADDRESS><EMAIL_ADDRESS>is no longer maintained. Upgrade to<EMAIL_ADDRESS>npm WARN deprecated<EMAIL_ADDRESS><EMAIL_ADDRESS>is no longer maintained. Upgrade to<EMAIL_ADDRESS>npm WARN deprecated<EMAIL_ADDRESS>Deprecated, use jstransformer
npm WARN optional dep failed, continuing<EMAIL_ADDRESS>npm WARN engine<EMAIL_ADDRESS>wanted: {"node":"0.8.x"} (current: {"node":"6.2.0","npm":"2.15.6"})
Killed
On Debian, the same install hangs with the following messages:
root@instance-1:~# npm install -g strider
npm WARN deprecated<EMAIL_ADDRESS>Jade has been renamed to pug, please install the latest version of pug instead of jade
npm WARN deprecated<EMAIL_ADDRESS>v1.0.0 is a complete rewrite of Swig from the ground up. Previous versions are no longer supported
npm WARN engine<EMAIL_ADDRESS>wanted: {"node":"0.10.x"} (current: {"node":"6.2.0","npm":"2.15.6"})
npm WARN deprecated<EMAIL_ADDRESS><EMAIL_ADDRESS>is no longer maintained. Upgrade to<EMAIL_ADDRESS>npm WARN deprecated<EMAIL_ADDRESS><EMAIL_ADDRESS>is no longer maintained. Upgrade to<EMAIL_ADDRESS>npm WARN deprecated<EMAIL_ADDRESS>Deprecated, use jstransformer
npm WARN optional dep failed, continuing<EMAIL_ADDRESS>npm WARN engine<EMAIL_ADDRESS>wanted: {"node":"0.8.x"} (current: {"node":"6.2.0","npm":"2.15.6"})
npm WARN deprecated<EMAIL_ADDRESS>graceful-fs v3.0.0 and before will fail on node releases >= v7.0. Please update to<EMAIL_ADDRESS>as soon as possible. Use 'npm ls graceful-fs' to find it in the tree.
Is the Strider project under active development?

Sounds like an npm issue. You can ignore the graceful-fs warning, since node 7 isn't even out yet and we don't officially support it.

Thanks.  Is there any version of npm that is known to work with the current version of Strider?

2+ should work just fine, as your CentOS proves (I use 2.14.12 on OSX and 2.15.1 on Ubuntu). Seems like a bug with npm on Debian.

When running strider I am having a similar issue:
2016-06-14T09:47:13.600Z - info: failed to load plugin simple-runner Cannot find module 'graceful-fs' Error: Cannot find module 'graceful-fs' 2016-06-14T09:47:13.602Z - error: { [Error: Cannot find module 'graceful-fs'; error loading plugin simple-runner] code: 'MODULE_NOT_FOUND' } 2016-06-14T09:47:13.602Z - error: Failed to load plugins
I have reinstalled all npm packages with npm v2.15.1 and v3.9.5. It fails with the same error.

My problem is when doing npm install, the version of fs-extra (strider-simple-runner) is: "fs-extra": "~0.8.1".
When installing via dev.sh the version is 0.29.0 and 0.30.0 is required.

I've updated the version in simple-runner, will release that today.

Ah ok! Thanks :D

Ok, it should be fixed. I bumped the version for simple-runner in this repo as well.

It works for npm install. I suppose when you release simple-runner will work with dev.sh too.
Thanks again!

I already released it, so it should work.

It also works, right :)

@rohanoberoicornell  does this fix your issue (try master branch of this repo)?

Hi Ilya, I will let you know when I get a chance to verify.
On 17 June 2016 at 17:16, Ilya Radchenko<EMAIL_ADDRESS>wrote:

@rohanoberoicornell https://github.com/rohanoberoicornell does this fix
your issue (try master branch of this repo)?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/Strider-CD/strider/issues/937#issuecomment-226797537,
or mute the thread
https://github.com/notifications/unsubscribe/ADQAmaSe4ZuFot7xcZ8syRE8MNHoVPP0ks5qMrpbgaJpZM4Inkb1
.


Lag time navigating to Home screen

Description
When clicking on the Home screen from the Settings screen there seems to be some lag time that was introduced. I have to click the Home screen three times before it moves to that screen.
Steps to reproduce

Click on the Settings screen
Click back on the Home screen

Additional context
No response
Hedera network
other
Version
v0.2.0
Operating system
macOS

[ ] Includes tests

This also occurs when moving between other tabs from Home


[10.x]: Add Blade @use directive

This is a variation on #49177 as I talked myself into a slightly better approach.
This is only an addition, so shouldn't cause any trouble or disturbance - unless someone has create a custom Blade directive called @use.
A minor addition for convenience when trying to use classes/enums in your Blade templates.
Benefits

1 line instead of 3 🔥
Less code to type ⏱
Makes templates look cleaner 🧹
Better than abusing @inject just for enums 😅

Example
{{-- Before --}}
@php
use \App\Enums\WidgetStatusEnum as Status;
@endphp

{{-- After --}}
@use('App\Enums\WidgetStatusEnum', 'Status')

@use('App\Models\Bar')

{{ Status::Foo }}

{{ Bar::first() }}

Caveats
IDE support won't be there initially for folks, so there will be squigglies.

Would it be possible to make the second parameter optional and use the class name by default?
@use('App\Enum\StatusEnum')

{{ EnumStatus::Foo }}

@PerryvanderMeer great suggestion! Added

would @use(App\Models\Bar::class) work? (or even better @use(App\Models\Bar))

@lazer-hybiz @use(App\Models\Bar) will work. @use(App\Models\Bar::class) won't, because you wouldn't write that in a normal use statement.

Would it be possible to make the second parameter optional and use the class name by default?
@use('App\Enum\StatusEnum')

{{ EnumStatus::Foo }}

I actually don't think you can make this assumption. You can import a namespace without importing a class.
use App\Repositories;

Repositories\UserRepository::all();

Could you replace ::class with nothing when compiling or would that not actually help IDE support

@dillingham could do... but why write those extra characters when you don't need to?

We've actually had this in our app for ~6 months, and at least with PhpStorm it's quite easy to add IDE support by just configuring a new blade directive. It works great!

We've actually had this in our app for ~6 months, and at least with PhpStorm it's quite easy to add IDE support by just configuring a new blade directive. It works great!

Please could you share the PHPStorm settings for this new blade directive. I attempted this myself but the class being defined with a string seems to make it tricky to configure perfectly.
This is what i tried:

This is how it's displaying in my IDE:

vs how it displays without the new directive:


python310Packages.hahomematic: 2023.1.2 -> 2023.1.3

Diff: https://github.com/danielperna84/hahomematic/compare/refs/tags/2023.1.2...2023.1.3
Changelog: https://github.com/danielperna84/hahomematic/releases/tag/2023.1.3
Description of changes

Things done

Built on platform(s)

[ ] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

[ ] For non-Linux: Is sandbox = true set in nix.conf? (See Nix manual)
[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[ ] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[ ] Tested basic functionality of all binary files (usually in ./result/bin/)
23.05 Release Notes (or backporting 22.11 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module
[ ] (Release notes changes) Ran nixos/doc/manual/md-to-db.sh to update generated release notes

[ ] Fits CONTRIBUTING.md.

Result of nixpkgs-review pr 210660 run on x86_64-linux 1

2 packages built:

python310Packages.hahomematic
python39Packages.hahomematic


Handle image IO in a separate thread

I haven't benchmarked it, but as we optimize the rendering and aggregation code, I expect that IO will become a bottleneck. It would be helpful to look into whether we can read/write the images asynchronously in another thread.

This would probably be a queue where you push in the main thread and pop in the writing thread.

An additional step would be to do IO in a temp directory. In previous experiments we found that the /ofo-share is slower than writing to the user space. So it might be good to write to the user folder and then batch copy them to /ofo-share.

The speed of label read, write, and copy was tested to/from user space and ofo-share using the images in /ofo-share/scratch-david/organized-str-disp-MVMT-experiments/per_site_processing/delta/03_training_data/renders. The results shown below display that the label operations were fairly fast and thus threading is not necessary since IO is not the main bottleneck.
(1) Read/write to ofo-share
Average read time per time label: 0.000451 seconds
Average write time per time label: 0.009240 seconds
Total time taken to read 708 files: 0.3190
Total time taken to write 708 files: 6.5419
(2) Read/write to user space
Average read time per time label: 0.000416 seconds
Average write time per time label: 0.000180 seconds
Total time taken to read 708 files: 0.2942
Total time taken to write 708 files: 0.1272
(3) Copy from ofo-share to ofo-share
Average copy time per time label: 0.016808 seconds
(4) Copy from user space to ofo-share
Average copy time per time label: 0.015213 seconds
(5) Copy from ofo-share to user space
Average copy time per time label: 0.000186 seconds
(6) Copy from user space to user space
Average copy time per time label: 0.000135 seconds


TypeError: object of type 'TransformerBlockList' has no len()

I'm trying to run EleutherAI/gpt-j-6B on a Titan V (12 GB), which can't fit the weights, so after loading the PyTorch model I'm doing:
torch.cuda.device(0):  model = bminf.wrapper(model)

but, now I get the error (full error log at the end):
TypeError: object of type 'TransformerBlockList' has no len()

So I tried patching class TransformerBlockList(torch.nn.Module) by adding a __len__   method:
    def __len__(self):
        return len(self.layers)

and the model finally runs, but I'm getting nonsense (random words) as output.
The code is roughly:
import transformers

model = transformers.GPTJForCausalLM.from_pretrained(f'EleutherAI/{MODELN}', revision='float16', torch_dtype=torch.float16, low_cpu_mem_usage=True)
torch.save(model, MODELN)
print(model)

if not os.path.exists(f'{DATAD}/{MODELN}.pt'):  shutil.copy(f'{MODELN}.pt', DATAD)
model     = torch.load(f'{DATAD}/{MODELN}.pt')                                  # 11 s @ /dev/shm
tokenizer = transformers.AutoTokenizer.from_pretrained(f'EleutherAI/{MODELN}')  #  8 s
with torch.cuda.device(0):  model = bminf.wrapper(model)                        # 14 s

pl    = transformers.pipeline('text-generation', model=model, tokenizer=tokenizer, max_length=100, device=0)  # create pipeline
otxts = pl(prompt)
for txt in otxts:
	print(f"\x1b[32m{txt['generated_text']}\x1b[0m")

Full error log:
/home/da/py38/lib/python3.8/site-packages/torch/nn/modules/module.py:673: UserWarning: The .grad attribute of a Tensor that is not a leaf Tensor is being accessed. Its .grad attribute won't be populated during autograd.backward(). If you indeed want the .grad field to be populated for a non-leaf Tensor, use .retain_grad() on the non-leaf Tensor. If you access the non-leaf Tensor by mistake, make sure you access the leaf Tensor instead. See github.com/pytorch/pytorch/pull/30531 for more informations. (Triggered internally at aten/src/ATen/core/TensorBody.h:480.)
  if param.grad is not None:
Setting `pad_token_id` to `eos_token_id`:50256 for open-end generation.
/home/da/.local/lib/python3.8/site-packages/transformers/generation/utils.py:1387: UserWarning: Neither `max_length` nor `max_new_tokens` has been set, `max_length` will default to 50 (`self.config.max_length`). Controlling `max_length` via the config is deprecated and `max_length` will be removed from the config in v5 of Transformers -- we recommend using `max_new_tokens` to control the maximum length of the generation.
  warnings.warn(
Traceback (most recent call last):
  File "./app.py", line 84, in <module>
    txt = pl(prompt)  # inf  # [{'generated_text': 'My Name is philipp k. and I live just outside of Detroit....
  File "/home/da/.local/lib/python3.8/site-packages/transformers/pipelines/text_generation.py", line 202, in __call__
    return super().__call__(text_inputs, **kwargs)
  File "/home/da/.local/lib/python3.8/site-packages/transformers/pipelines/base.py", line 1074, in __call__
    return self.run_single(inputs, preprocess_params, forward_params, postprocess_params)
  File "/home/da/.local/lib/python3.8/site-packages/transformers/pipelines/base.py", line 1081, in run_single
    model_outputs = self.forward(model_inputs, **forward_params)
  File "/home/da/.local/lib/python3.8/site-packages/transformers/pipelines/base.py", line 990, in forward
    model_outputs = self._forward(model_inputs, **forward_params)
  File "/home/da/.local/lib/python3.8/site-packages/transformers/pipelines/text_generation.py", line 244, in _forward
    generated_sequence = self.model.generate(input_ids=input_ids, attention_mask=attention_mask, **generate_kwargs)
  File "/home/da/py38/lib/python3.8/site-packages/torch/autograd/grad_mode.py", line 27, in decorate_context
    return func(*args, **kwargs)
  File "/home/da/.local/lib/python3.8/site-packages/transformers/generation/utils.py", line 1571, in generate
    return self.sample(
  File "/home/da/.local/lib/python3.8/site-packages/transformers/generation/utils.py", line 2534, in sample
    outputs = self(
  File "/home/da/py38/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1190, in _call_impl
    return forward_call(*input, **kwargs)
  File "/home/da/.local/lib/python3.8/site-packages/transformers/models/gptj/modeling_gptj.py", line 821, in forward
    transformer_outputs = self.transformer(
  File "/home/da/py38/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1190, in _call_impl
    return forward_call(*input, **kwargs)
  File "/home/da/.local/lib/python3.8/site-packages/transformers/models/gptj/modeling_gptj.py", line 587, in forward
    past_key_values = tuple([None] * len(self.h))
TypeError: object of type 'TransformerBlockList' has no len()

It looks like bminf.wrapper is not working properly. I'm looking for a solution to this problem.

Solved here https://github.com/OpenBMB/BMInf/issues/63


Level select is broken in the menu when game has never been played

When the game has never been played, the level select ("area") will be 0, which will try to load MAP00 and crash with an error about P_SetupLevel unable to find MAP00. Decreasing the "area" lower than 0 will also cause a crash, but it cannot be increased.
The bug is not present when levels have been completed because the "area" will be 1.
I'm running this in Wine. I was able to get around this and playtest by editing the map numbers in the ROM to start from 0.

This is actually a bug in the config utility which I've already fixed (and am about to upload a fix for in the windows binary release). If you allow the game to generate the eeprom.cal file first, this shouldn't occur.