mirror of
				https://github.com/Telecominfraproject/ols-nos.git
				synced 2025-10-31 01:57:48 +00:00 
			
		
		
		
	Add switch for synchronous mode (#5237)
Add a master switch so that the sync/async mode can be configured.
Example usage of the switch:
1.  Configure mode while building an image
    `make ENABLE_SYNCHRONOUS_MODE=y <target>`
2. Configure when the device is running 
    Change CONFIG_DB with `sonic-cfggen -a '{"DEVICE_METADATA":{"localhost": {"synchronous_mode": "enable"}}}' --write-to-db`
    Restart swss with `systemctl restart swss`
			
			
This commit is contained in:
		
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -60,3 +60,5 @@ platform/broadcom/sonic-platform-modules-dell/s6100/modules/dell_s6100_lpc.c | |||||||
| platform/broadcom/sonic-platform-modules-dell/z9100/modules/dell_ich.c | platform/broadcom/sonic-platform-modules-dell/z9100/modules/dell_ich.c | ||||||
| platform/broadcom/sonic-platform-modules-dell/z9100/modules/dell_mailbox.c | platform/broadcom/sonic-platform-modules-dell/z9100/modules/dell_mailbox.c | ||||||
| platform/broadcom/sonic-platform-modules-dell/z9264f/sonic_platform/ipmihelper.py | platform/broadcom/sonic-platform-modules-dell/z9264f/sonic_platform/ipmihelper.py | ||||||
|  | platform/vs/docker-sonic-vs/init_cfg.json | ||||||
|  | platform/p4/docker-sonic-p4/init_cfg.json | ||||||
|   | |||||||
| @@ -38,6 +38,7 @@ | |||||||
| #  * SONIC_DPKG_CACHE_METHOD: Specifying method of obtaining the Debian packages from cache: none or cache | #  * SONIC_DPKG_CACHE_METHOD: Specifying method of obtaining the Debian packages from cache: none or cache | ||||||
| #  * SONIC_DPKG_CACHE_SOURCE: Debian package cache location when cache enabled for debian packages | #  * SONIC_DPKG_CACHE_SOURCE: Debian package cache location when cache enabled for debian packages | ||||||
| #  * BUILD_LOG_TIMESTAMP: Set timestamp in the build log (simple/none) | #  * BUILD_LOG_TIMESTAMP: Set timestamp in the build log (simple/none) | ||||||
|  | #  * ENABLE_SYNCHRONOUS_MODE: Enable synchronous mode between orchagent and syncd | ||||||
| # | # | ||||||
| ############################################################################### | ############################################################################### | ||||||
|  |  | ||||||
| @@ -212,6 +213,7 @@ SONIC_BUILD_INSTRUCTION :=  make \ | |||||||
|                            EXTRA_DOCKER_TARGETS=$(EXTRA_DOCKER_TARGETS) \ |                            EXTRA_DOCKER_TARGETS=$(EXTRA_DOCKER_TARGETS) \ | ||||||
|                            BUILD_LOG_TIMESTAMP=$(BUILD_LOG_TIMESTAMP) \ |                            BUILD_LOG_TIMESTAMP=$(BUILD_LOG_TIMESTAMP) \ | ||||||
|                            SONIC_ENABLE_IMAGE_SIGNATURE=$(ENABLE_IMAGE_SIGNATURE) \ |                            SONIC_ENABLE_IMAGE_SIGNATURE=$(ENABLE_IMAGE_SIGNATURE) \ | ||||||
|  |                            ENABLE_SYNCHRONOUS_MODE=$(ENABLE_SYNCHRONOUS_MODE) \ | ||||||
|                            $(SONIC_OVERRIDE_BUILD_VARS) |                            $(SONIC_OVERRIDE_BUILD_VARS) | ||||||
|  |  | ||||||
| .PHONY: sonic-slave-build sonic-slave-bash init reset | .PHONY: sonic-slave-build sonic-slave-bash init reset | ||||||
|   | |||||||
| @@ -25,6 +25,12 @@ ORCHAGENT_ARGS="-d /var/log/swss " | |||||||
| # Set orchagent pop batch size to 8192 | # Set orchagent pop batch size to 8192 | ||||||
| ORCHAGENT_ARGS+="-b 8192 " | ORCHAGENT_ARGS+="-b 8192 " | ||||||
|  |  | ||||||
|  | # Set synchronous mode if it is enabled in CONFIG_DB | ||||||
|  | SYNC_MODE=$(echo $SWSS_VARS | jq -r '.synchronous_mode') | ||||||
|  | if [ "$SYNC_MODE" == "enable" ]; then | ||||||
|  |     ORCHAGENT_ARGS+="-s " | ||||||
|  | fi | ||||||
|  |  | ||||||
| # Check if there is an "asic_id field" in the DEVICE_METADATA in configDB. | # Check if there is an "asic_id field" in the DEVICE_METADATA in configDB. | ||||||
| #"DEVICE_METADATA": { | #"DEVICE_METADATA": { | ||||||
| #    "localhost": { | #    "localhost": { | ||||||
|   | |||||||
| @@ -1,6 +1,7 @@ | |||||||
| { | { | ||||||
|     "asic_type": "{{ asic_type }}", |     "asic_type": "{{ asic_type }}", | ||||||
|     "asic_id": "{{ DEVICE_METADATA.localhost.asic_id }}", |     "asic_id": "{{ DEVICE_METADATA.localhost.asic_id }}", | ||||||
|     "mac": "{{ DEVICE_METADATA.localhost.mac }}" |     "mac": "{{ DEVICE_METADATA.localhost.mac }}", | ||||||
|  |     "synchronous_mode": "{{ DEVICE_METADATA.localhost.synchronous_mode }}" | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -2,7 +2,8 @@ | |||||||
|     "DEVICE_METADATA": { |     "DEVICE_METADATA": { | ||||||
|         "localhost": { |         "localhost": { | ||||||
|             "default_bgp_status": {% if shutdown_bgp_on_start == "y" %}"down"{% else %}"up"{% endif %}, |             "default_bgp_status": {% if shutdown_bgp_on_start == "y" %}"down"{% else %}"up"{% endif %}, | ||||||
|             "default_pfcwd_status": {% if enable_pfcwd_on_start == "y" %}"enable"{% else %}"disable"{% endif %} |             "default_pfcwd_status": {% if enable_pfcwd_on_start == "y" %}"enable"{% else %}"disable"{% endif %}, | ||||||
|  |             "synchronous_mode": {% if enable_synchronous_mode == "y" %}"enable"{% else %}"disable"{% endif %} | ||||||
|         } |         } | ||||||
|     }, |     }, | ||||||
|     "CRM": { |     "CRM": { | ||||||
|   | |||||||
| @@ -78,6 +78,7 @@ COPY ["start.sh", "orchagent.sh", "config_bm.sh", "/usr/bin/"] | |||||||
| COPY ["supervisord.conf", "/etc/supervisor/conf.d/"] | COPY ["supervisord.conf", "/etc/supervisor/conf.d/"] | ||||||
| COPY ["files/configdb-load.sh", "/usr/bin/"] | COPY ["files/configdb-load.sh", "/usr/bin/"] | ||||||
| COPY ["files/arp_update", "/usr/bin"] | COPY ["files/arp_update", "/usr/bin"] | ||||||
|  | COPY ["init_cfg.json", "/etc/sonic/"] | ||||||
| RUN echo "docker-sonic-p4" > /etc/hostname | RUN echo "docker-sonic-p4" > /etc/hostname | ||||||
| RUN touch /etc/quagga/zebra.conf | RUN touch /etc/quagga/zebra.conf | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										7
									
								
								platform/p4/docker-sonic-p4/init_cfg.json.j2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								platform/p4/docker-sonic-p4/init_cfg.json.j2
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | |||||||
|  | { | ||||||
|  |     "DEVICE_METADATA": { | ||||||
|  |         "localhost": { | ||||||
|  |             "synchronous_mode": {% if enable_synchronous_mode == "y" %}"enable"{% else %}"disable"{% endif %} | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -13,6 +13,12 @@ ORCHAGENT_ARGS="-d /var/log/swss " | |||||||
| # Set orchagent pop batch size to 8192 | # Set orchagent pop batch size to 8192 | ||||||
| ORCHAGENT_ARGS+="-b 8192 " | ORCHAGENT_ARGS+="-b 8192 " | ||||||
|  |  | ||||||
|  | # Set synchronous mode if it is enabled in CONFIG_DB | ||||||
|  | SYNC_MODE=$(sonic-cfggen -d -v DEVICE_METADATA.localhost.synchronous_mode) | ||||||
|  | if [ "$SYNC_MODE" == "enable" ]; then | ||||||
|  |     ORCHAGENT_ARGS+="-s " | ||||||
|  | fi | ||||||
|  |  | ||||||
| # Set mac address | # Set mac address | ||||||
| ORCHAGENT_ARGS+="-m $MAC_ADDRESS" | ORCHAGENT_ARGS+="-m $MAC_ADDRESS" | ||||||
|  |  | ||||||
|   | |||||||
| @@ -8,7 +8,12 @@ if ! ip link show eth0 &> /dev/null; then | |||||||
| fi | fi | ||||||
|  |  | ||||||
| SYSTEM_MAC_ADDRESS=$(ip link show eth0 | grep ether | awk '{print $2}') | SYSTEM_MAC_ADDRESS=$(ip link show eth0 | grep ether | awk '{print $2}') | ||||||
|  | if [ -f /etc/sonic/init_cfg.json ]; then | ||||||
|  |     sonic-cfggen -j /etc/sonic/init_cfg.json -a '{"DEVICE_METADATA":{"localhost": {"mac": "'$SYSTEM_MAC_ADDRESS'"}}}' --print-data > /tmp/init_cfg.json | ||||||
|  |     mv /tmp/init_cfg.json /etc/sonic/init_cfg.json | ||||||
|  | else | ||||||
|     sonic-cfggen -a '{"DEVICE_METADATA":{"localhost": {"mac": "'$SYSTEM_MAC_ADDRESS'"}}}' --print-data > /etc/sonic/init_cfg.json |     sonic-cfggen -a '{"DEVICE_METADATA":{"localhost": {"mac": "'$SYSTEM_MAC_ADDRESS'"}}}' --print-data > /etc/sonic/init_cfg.json | ||||||
|  | fi | ||||||
|  |  | ||||||
| if [ -f /etc/sonic/config_db.json ]; then | if [ -f /etc/sonic/config_db.json ]; then | ||||||
|     sonic-cfggen -j /etc/sonic/init_cfg.json -j /etc/sonic/config_db.json --print-data > /tmp/config_db.json |     sonic-cfggen -j /etc/sonic/init_cfg.json -j /etc/sonic/config_db.json --print-data > /tmp/config_db.json | ||||||
|   | |||||||
| @@ -128,6 +128,7 @@ COPY ["files/configdb-load.sh", "/usr/bin/"] | |||||||
| COPY ["files/arp_update", "/usr/bin/"] | COPY ["files/arp_update", "/usr/bin/"] | ||||||
| COPY ["files/buffers_config.j2", "files/qos_config.j2", "/usr/share/sonic/templates/"] | COPY ["files/buffers_config.j2", "files/qos_config.j2", "/usr/share/sonic/templates/"] | ||||||
| COPY ["files/sonic_version.yml", "/etc/sonic/"] | COPY ["files/sonic_version.yml", "/etc/sonic/"] | ||||||
|  | COPY ["init_cfg.json", "/etc/sonic/"] | ||||||
| COPY ["database_config.json", "/etc/default/sonic-db/"] | COPY ["database_config.json", "/etc/default/sonic-db/"] | ||||||
| COPY ["hostname.j2", "/usr/share/sonic/templates/"] | COPY ["hostname.j2", "/usr/share/sonic/templates/"] | ||||||
| COPY ["default_chassis_cfg.json", "/etc/default/sonic-db/"] | COPY ["default_chassis_cfg.json", "/etc/default/sonic-db/"] | ||||||
|   | |||||||
							
								
								
									
										7
									
								
								platform/vs/docker-sonic-vs/init_cfg.json.j2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								platform/vs/docker-sonic-vs/init_cfg.json.j2
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | |||||||
|  | { | ||||||
|  |     "DEVICE_METADATA": { | ||||||
|  |         "localhost": { | ||||||
|  |             "synchronous_mode": {% if enable_synchronous_mode == "y" %}"enable"{% else %}"disable"{% endif %} | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -6,7 +6,8 @@ else | |||||||
|     export platform=$fake_platform |     export platform=$fake_platform | ||||||
| fi | fi | ||||||
|  |  | ||||||
| MAC_ADDRESS=$(sonic-cfggen -d -v 'DEVICE_METADATA.localhost.mac') | CFG_VARS=$(sonic-cfggen -d --var-json 'DEVICE_METADATA') | ||||||
|  | MAC_ADDRESS=$(echo $CFG_VARS | jq -r '.localhost.mac') | ||||||
| if [ "$MAC_ADDRESS" == "None" ] || [ -z "$MAC_ADDRESS" ]; then | if [ "$MAC_ADDRESS" == "None" ] || [ -z "$MAC_ADDRESS" ]; then | ||||||
|     MAC_ADDRESS=$(ip link show eth0 | grep ether | awk '{print $2}') |     MAC_ADDRESS=$(ip link show eth0 | grep ether | awk '{print $2}') | ||||||
|     logger "Mac address not found in Device Metadata, Falling back to eth0" |     logger "Mac address not found in Device Metadata, Falling back to eth0" | ||||||
| @@ -19,6 +20,12 @@ ORCHAGENT_ARGS="-d /var/log/swss " | |||||||
| # Set orchagent pop batch size to 8192 | # Set orchagent pop batch size to 8192 | ||||||
| ORCHAGENT_ARGS+="-b 8192 " | ORCHAGENT_ARGS+="-b 8192 " | ||||||
|  |  | ||||||
|  | # Set synchronous mode if it is enabled in CONFIG_DB | ||||||
|  | SYNC_MODE=$(echo $CFG_VARS | jq -r '.localhost.synchronous_mode') | ||||||
|  | if [ "$SYNC_MODE" == "enable" ]; then | ||||||
|  |     ORCHAGENT_ARGS+="-s " | ||||||
|  | fi | ||||||
|  |  | ||||||
| # Set mac address | # Set mac address | ||||||
| ORCHAGENT_ARGS+="-m $MAC_ADDRESS" | ORCHAGENT_ARGS+="-m $MAC_ADDRESS" | ||||||
|  |  | ||||||
|   | |||||||
| @@ -31,7 +31,12 @@ if [[ -f /usr/share/sonic/virtual_chassis/default_config.json ]]; then | |||||||
| fi | fi | ||||||
|  |  | ||||||
| SYSTEM_MAC_ADDRESS=$(ip link show eth0 | grep ether | awk '{print $2}') | SYSTEM_MAC_ADDRESS=$(ip link show eth0 | grep ether | awk '{print $2}') | ||||||
|  | if [ -f /etc/sonic/init_cfg.json ]; then | ||||||
|  |     sonic-cfggen -j /etc/sonic/init_cfg.json -a '{"DEVICE_METADATA":{"localhost": {"mac": "'$SYSTEM_MAC_ADDRESS'"}}}' $CHASS_CFG --print-data > /tmp/init_cfg.json | ||||||
|  |     mv /tmp/init_cfg.json /etc/sonic/init_cfg.json | ||||||
|  | else | ||||||
|     sonic-cfggen -a '{"DEVICE_METADATA":{"localhost": {"mac": "'$SYSTEM_MAC_ADDRESS'"}}}' $CHASS_CFG --print-data > /etc/sonic/init_cfg.json |     sonic-cfggen -a '{"DEVICE_METADATA":{"localhost": {"mac": "'$SYSTEM_MAC_ADDRESS'"}}}' $CHASS_CFG --print-data > /etc/sonic/init_cfg.json | ||||||
|  | fi | ||||||
|  |  | ||||||
| if [ -f /etc/sonic/config_db.json ]; then | if [ -f /etc/sonic/config_db.json ]; then | ||||||
|     sonic-cfggen -j /etc/sonic/init_cfg.json -j /etc/sonic/config_db.json --print-data > /tmp/config_db.json |     sonic-cfggen -j /etc/sonic/init_cfg.json -j /etc/sonic/config_db.json --print-data > /tmp/config_db.json | ||||||
|   | |||||||
| @@ -158,3 +158,6 @@ K8s_GCR_IO_PAUSE_VERSION = 3.2 | |||||||
| #     CA_CERT = | #     CA_CERT = | ||||||
| # The relative path is build root folder. | # The relative path is build root folder. | ||||||
| SONIC_ENABLE_IMAGE_SIGNATURE ?= n | SONIC_ENABLE_IMAGE_SIGNATURE ?= n | ||||||
|  |  | ||||||
|  | # ENABLE_SYNCHRONOUS_MODE - enable synchronous mode between orchagent and syncd | ||||||
|  | ENABLE_SYNCHRONOUS_MODE = n | ||||||
|   | |||||||
							
								
								
									
										5
									
								
								slave.mk
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								slave.mk
									
									
									
									
									
								
							| @@ -230,6 +230,7 @@ $(info "INCLUDE_SFLOW"                   : "$(INCLUDE_SFLOW)") | |||||||
| $(info "INCLUDE_NAT"                     : "$(INCLUDE_NAT)") | $(info "INCLUDE_NAT"                     : "$(INCLUDE_NAT)") | ||||||
| $(info "INCLUDE_KUBERNETES"              : "$(INCLUDE_KUBERNETES)") | $(info "INCLUDE_KUBERNETES"              : "$(INCLUDE_KUBERNETES)") | ||||||
| $(info "TELEMETRY_WRITABLE"              : "$(TELEMETRY_WRITABLE)") | $(info "TELEMETRY_WRITABLE"              : "$(TELEMETRY_WRITABLE)") | ||||||
|  | $(info "ENABLE_SYNCHRONOUS_MODE"         : "$(ENABLE_SYNCHRONOUS_MODE)") | ||||||
| $(info ) | $(info ) | ||||||
|  |  | ||||||
| include Makefile.cache | include Makefile.cache | ||||||
| @@ -247,6 +248,7 @@ endif | |||||||
|  |  | ||||||
| export kernel_procure_method=$(KERNEL_PROCURE_METHOD) | export kernel_procure_method=$(KERNEL_PROCURE_METHOD) | ||||||
| export vs_build_prepare_mem=$(VS_PREPARE_MEM) | export vs_build_prepare_mem=$(VS_PREPARE_MEM) | ||||||
|  | export enable_synchronous_mode=$(ENABLE_SYNCHRONOUS_MODE) | ||||||
|  |  | ||||||
| ############################################################################### | ############################################################################### | ||||||
| ## Local targets | ## Local targets | ||||||
| @@ -695,6 +697,9 @@ $(addprefix $(TARGET_PATH)/, $(DOCKER_IMAGES)) : $(TARGET_PATH)/%.gz : .platform | |||||||
| 		$(eval export $(subst -,_,$(notdir $($*.gz_PATH)))_whls=$(shell printf "$(subst $(SPACE),\n,$(call expand,$($*.gz_PYTHON_WHEELS)))\n" | awk '!a[$$0]++')) | 		$(eval export $(subst -,_,$(notdir $($*.gz_PATH)))_whls=$(shell printf "$(subst $(SPACE),\n,$(call expand,$($*.gz_PYTHON_WHEELS)))\n" | awk '!a[$$0]++')) | ||||||
| 		$(eval export $(subst -,_,$(notdir $($*.gz_PATH)))_dbgs=$(shell printf "$(subst $(SPACE),\n,$(call expand,$($*.gz_DBG_PACKAGES)))\n" | awk '!a[$$0]++')) | 		$(eval export $(subst -,_,$(notdir $($*.gz_PATH)))_dbgs=$(shell printf "$(subst $(SPACE),\n,$(call expand,$($*.gz_DBG_PACKAGES)))\n" | awk '!a[$$0]++')) | ||||||
| 		j2 $($*.gz_PATH)/Dockerfile.j2 > $($*.gz_PATH)/Dockerfile | 		j2 $($*.gz_PATH)/Dockerfile.j2 > $($*.gz_PATH)/Dockerfile | ||||||
|  | 		if [ -f $($*.gz_PATH)/init_cfg.json.j2 ] ; then | ||||||
|  | 			j2 $($*.gz_PATH)/init_cfg.json.j2 > $($*.gz_PATH)/init_cfg.json | ||||||
|  | 		fi | ||||||
| 		docker info $(LOG) | 		docker info $(LOG) | ||||||
| 		docker build --squash --no-cache \ | 		docker build --squash --no-cache \ | ||||||
| 			--build-arg http_proxy=$(HTTP_PROXY) \ | 			--build-arg http_proxy=$(HTTP_PROXY) \ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 shi-su
					shi-su