Skip to content

Commit

Permalink
Merge branch 'master' into upgrade
Browse files Browse the repository at this point in the history
  • Loading branch information
hdwhdw committed Nov 6, 2024
2 parents 2a11f04 + e844925 commit 7a7005c
Show file tree
Hide file tree
Showing 5 changed files with 91 additions and 17 deletions.
24 changes: 20 additions & 4 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,10 +1,26 @@
# Build directory
build/

# Debian packaging files
debian/.debhelper/
debian/files
debian/sonic-telemetry.debhelper.log
debian/sonic-telemetry.substvars
debian/sonic-telemetry/
vendor
src
cvl
translib
debian/sonic-gnmi.debhelper.log
debian/sonic-gnmi.substvars
debian/sonic-gnmi/

# Vendor directory
vendor/

# Source directories
src/
cvl/
translib/

# SWSS common generated files
swsscommon/swsscommon.go
swsscommon/swsscommon.i
swsscommon/swsscommon_wrap.cxx
swsscommon/swsscommon_wrap.h
3 changes: 3 additions & 0 deletions common_utils/context.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ const (
DBUS_STOP_SERVICE
DBUS_RESTART_SERVICE
DBUS_FILE_STAT
DBUS_HALT_SYSTEM
DBUS_IMAGE_DOWNLOAD
DBUS_IMAGE_INSTALL
COUNTER_SIZE
Expand Down Expand Up @@ -93,6 +94,8 @@ func (c CounterType) String() string {
return "DBUS restart service"
case DBUS_FILE_STAT:
return "DBUS file stat"
case DBUS_HALT_SYSTEM:
return "DBUS halt system"
case DBUS_IMAGE_DOWNLOAD:
return "DBUS image download"
case DBUS_IMAGE_INSTALL:
Expand Down
48 changes: 37 additions & 11 deletions gnmi_server/gnoi.go
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,20 @@ func (srv *SystemServer) KillProcess(ctx context.Context, req *gnoi_system_pb.Ki
return &resp, nil
}

func HaltSystem() error {
sc,err := ssc.NewDbusClient()
if err != nil {
return err
}

log.V(2).Infof("Halting the system..")
err = sc.HaltSystem()
if err != nil {
log.V(2).Infof("Failed to Halt the system %v", err);
}
return err
}

func RebootSystem(fileName string) error {
log.V(2).Infof("Rebooting with %s...", fileName)
sc, err := ssc.NewDbusClient()
Expand All @@ -158,18 +172,30 @@ func (srv *SystemServer) Reboot(ctx context.Context, req *gnoi_system_pb.RebootR
}
log.V(1).Info("gNOI: Reboot")
log.V(1).Info("Request:", req)
log.V(1).Info("Reboot system now, delay is ignored...")
// TODO: Support GNOI reboot delay
// Delay in nanoseconds before issuing reboot.
// https://github.com/openconfig/gnoi/blob/master/system/system.proto#L102-L115
config_db_json, err := io.ReadFile(fileName)
if errors.Is(err, os.ErrNotExist) {
fileName = ""
}
err = RebootSystem(string(config_db_json))
if err != nil {
return nil, err

// Check the reboot type
switch req.GetMethod() {
case gnoi_system_pb.RebootMethod_HALT:
log.V(1).Info("Reboot method is HALT. Halting the system...")
err = HaltSystem()
if err != nil {
return nil, err
}
default:
log.V(1).Info("Reboot system now, delay is ignored...")
// TODO: Support GNOI reboot delay
// Delay in nanoseconds before issuing reboot.
// https://github.com/openconfig/gnoi/blob/master/system/system.proto#L102-L115
config_db_json, err := io.ReadFile(fileName)
if errors.Is(err, os.ErrNotExist) {
fileName = ""
}
err = RebootSystem(string(config_db_json))
if err != nil {
return nil, err
}
}

var resp gnoi_system_pb.RebootResponse
return &resp, nil
}
Expand Down
20 changes: 19 additions & 1 deletion sonic_service_client/dbus_client.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ type Service interface {
StopService(service string) error
RestartService(service string) error
GetFileStat(path string) (map[string]string, error)
HaltSystem() error
DownloadImage(url string, save_as string) error
InstallImage(where string) error
}
Expand Down Expand Up @@ -195,6 +196,24 @@ func (c *DbusClient) GetFileStat(path string) (map[string]string, error) {
return data, nil
}

func (c *DbusClient) HaltSystem() error {
// Increment the counter for the DBUS_HALT_SYSTEM event
common_utils.IncCounter(common_utils.DBUS_HALT_SYSTEM)

// Set the module name and update the D-Bus properties
modName := "systemd"
busName := c.busNamePrefix + modName
busPath := c.busPathPrefix + modName
intName := c.intNamePrefix + modName + ".execute_reboot"

//Set the method to HALT(3) the system
const RebootMethod_HALT = 3

// Invoke the D-Bus API to execute the halt command
_, err := DbusApi(busName, busPath, intName, 10, RebootMethod_HALT)
return err
}

func (c *DbusClient) DownloadImage(url string, save_as string) error {
common_utils.IncCounter(common_utils.DBUS_IMAGE_DOWNLOAD)
modName := "image_service"
Expand All @@ -213,4 +232,3 @@ func (c *DbusClient) InstallImage(where string) error {
intName := c.intNamePrefix + modName + ".install"
_, err := DbusApi(busName, busPath, intName /*timeout=*/, 900, where)
return err
}
13 changes: 12 additions & 1 deletion test/test_gnoi.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,17 @@ def test_gnoi_reboot(self):
assert ret == 0, 'Fail to read counter'
assert new_cnt == old_cnt+1, 'DBUS API is not invoked'

def test_gnoi_reboot_halt(self):
ret, old_cnt = gnmi_dump('DBUS halt system')
assert ret == 0, 'Fail to read counter'

ret, msg = gnoi_reboot(3, 0, 'Test halt system')
assert ret == 0, msg

ret, new_cnt = gnmi_dump('DBUS halt system')
assert ret == 0, 'Fail to read counter'
assert new_cnt == old_cnt+1, 'DBUS API is not invoked'

def test_gnoi_rebootstatus(self):
ret, msg = gnoi_rebootstatus()
assert ret != 0, 'RebootStatus should fail' + msg
Expand Down Expand Up @@ -74,4 +85,4 @@ def test_gnoi_restartprocess_invalid(self):

ret, new_cnt = gnmi_dump('DBUS restart service')
assert ret == 0, 'Fail to read counter'
assert new_cnt == old_cnt, 'DBUS API invoked unexpectedly'
assert new_cnt == old_cnt, 'DBUS API invoked unexpectedly'

0 comments on commit 7a7005c

Please sign in to comment.