mirror of
				https://github.com/Telecominfraproject/ols-nos.git
				synced 2025-10-31 18:17:52 +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_mailbox.c | ||||
| 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_SOURCE: Debian package cache location when cache enabled for debian packages | ||||
| #  * 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) \ | ||||
|                            BUILD_LOG_TIMESTAMP=$(BUILD_LOG_TIMESTAMP) \ | ||||
|                            SONIC_ENABLE_IMAGE_SIGNATURE=$(ENABLE_IMAGE_SIGNATURE) \ | ||||
|                            ENABLE_SYNCHRONOUS_MODE=$(ENABLE_SYNCHRONOUS_MODE) \ | ||||
|                            $(SONIC_OVERRIDE_BUILD_VARS) | ||||
|  | ||||
| .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 | ||||
| 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. | ||||
| #"DEVICE_METADATA": { | ||||
| #    "localhost": { | ||||
|   | ||||
| @@ -1,6 +1,7 @@ | ||||
| { | ||||
|     "asic_type": "{{ asic_type }}", | ||||
|     "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": { | ||||
|         "localhost": { | ||||
|             "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": { | ||||
|   | ||||
| @@ -78,6 +78,7 @@ COPY ["start.sh", "orchagent.sh", "config_bm.sh", "/usr/bin/"] | ||||
| COPY ["supervisord.conf", "/etc/supervisor/conf.d/"] | ||||
| COPY ["files/configdb-load.sh", "/usr/bin/"] | ||||
| COPY ["files/arp_update", "/usr/bin"] | ||||
| COPY ["init_cfg.json", "/etc/sonic/"] | ||||
| RUN echo "docker-sonic-p4" > /etc/hostname | ||||
| 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 | ||||
| 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 | ||||
| ORCHAGENT_ARGS+="-m $MAC_ADDRESS" | ||||
|  | ||||
|   | ||||
| @@ -8,7 +8,12 @@ if ! ip link show eth0 &> /dev/null; then | ||||
| fi | ||||
|  | ||||
| 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 | ||||
| fi | ||||
|  | ||||
| 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 | ||||
|   | ||||
| @@ -128,6 +128,7 @@ COPY ["files/configdb-load.sh", "/usr/bin/"] | ||||
| COPY ["files/arp_update", "/usr/bin/"] | ||||
| COPY ["files/buffers_config.j2", "files/qos_config.j2", "/usr/share/sonic/templates/"] | ||||
| COPY ["files/sonic_version.yml", "/etc/sonic/"] | ||||
| COPY ["init_cfg.json", "/etc/sonic/"] | ||||
| COPY ["database_config.json", "/etc/default/sonic-db/"] | ||||
| COPY ["hostname.j2", "/usr/share/sonic/templates/"] | ||||
| 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 | ||||
| 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 | ||||
|     MAC_ADDRESS=$(ip link show eth0 | grep ether | awk '{print $2}') | ||||
|     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 | ||||
| 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 | ||||
| ORCHAGENT_ARGS+="-m $MAC_ADDRESS" | ||||
|  | ||||
|   | ||||
| @@ -31,7 +31,12 @@ if [[ -f /usr/share/sonic/virtual_chassis/default_config.json ]]; then | ||||
| fi | ||||
|  | ||||
| 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 | ||||
| fi | ||||
|  | ||||
| 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 | ||||
|   | ||||
| @@ -158,3 +158,6 @@ K8s_GCR_IO_PAUSE_VERSION = 3.2 | ||||
| #     CA_CERT = | ||||
| # The relative path is build root folder. | ||||
| 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_KUBERNETES"              : "$(INCLUDE_KUBERNETES)") | ||||
| $(info "TELEMETRY_WRITABLE"              : "$(TELEMETRY_WRITABLE)") | ||||
| $(info "ENABLE_SYNCHRONOUS_MODE"         : "$(ENABLE_SYNCHRONOUS_MODE)") | ||||
| $(info ) | ||||
|  | ||||
| include Makefile.cache | ||||
| @@ -247,6 +248,7 @@ endif | ||||
|  | ||||
| export kernel_procure_method=$(KERNEL_PROCURE_METHOD) | ||||
| export vs_build_prepare_mem=$(VS_PREPARE_MEM) | ||||
| export enable_synchronous_mode=$(ENABLE_SYNCHRONOUS_MODE) | ||||
|  | ||||
| ############################################################################### | ||||
| ## 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)))_dbgs=$(shell printf "$(subst $(SPACE),\n,$(call expand,$($*.gz_DBG_PACKAGES)))\n" | awk '!a[$$0]++')) | ||||
| 		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 build --squash --no-cache \ | ||||
| 			--build-arg http_proxy=$(HTTP_PROXY) \ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 shi-su
					shi-su