123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- package openngvfs
- import (
- "context"
- "fmt"
- "git.swzry.com/ProjectNagae/FsUtils/amntfs"
- "git.swzry.com/zry/GoHiedaLogger/hiedalog"
- )
- type LogHandlerIntf interface {
- ChildFsError(mid int64, fstype, mountpoint, path, action string, rawErr error)
- NoAvailableMountPointForThisPath(path string, action string)
- InitError(err error)
- UnknownError(path string, action string, err error)
- FsInitWasm(name string)
- }
- type OpenNagaeVFS struct {
- root *amntfs.AMNTFS
- logger *hiedalog.HiedaLogger
- initWAVM *InitWAVM
- }
- func NewOpenNagaeVFS(logger *hiedalog.HiedaLogger) *OpenNagaeVFS {
- return &OpenNagaeVFS{
- root: amntfs.NewAMNTFS(),
- logger: logger,
- }
- }
- func (n *OpenNagaeVFS) errorProcess(path, action string, err error) error {
- if aErr, ok := err.(*amntfs.AMNTFSError); ok {
- rawErr := aErr.GetRawError()
- var rawErrStr string
- if rawErr != nil {
- rawErrStr = rawErr.Error()
- } else {
- rawErrStr = ""
- }
- switch aErr.GetErrNo() {
- case amntfs.ErrChildFsError:
- n.logger.LogComplex("ngvfs", hiedalog.DLN_ERROR, map[string]string{
- "type": "child_fs_error",
- "path": path,
- "fstype": aErr.GetFsType(),
- "action": action,
- "mnt": aErr.GetMountPoint(),
- "mid": fmt.Sprintf("%016X", aErr.GetMountId()),
- "raw_err": rawErrStr,
- })
- return rawErr
- case amntfs.ErrNoAvailableMountPointForThisPath:
- n.logger.LogComplex("ngvfs", hiedalog.DLN_ERROR, map[string]string{
- "type": "no_mnt_point_error",
- "path": path,
- "action": action,
- })
- return fmt.Errorf("no available mount point for path '%s'", path)
- default:
- n.logger.LogComplex("ngvfs", hiedalog.DLN_ERROR, map[string]string{
- "type": "unknown_error",
- "path": path,
- "action": action,
- "raw_err": err.Error(),
- })
- return err
- }
- } else {
- var xerrStr string
- if err != nil {
- xerrStr = err.Error()
- } else {
- xerrStr = ""
- }
- n.logger.LogComplex("ngvfs", hiedalog.DLN_ERROR, map[string]string{
- "type": "unknown_error",
- "path": path,
- "action": action,
- "raw_err": xerrStr,
- })
- }
- return err
- }
- func (n *OpenNagaeVFS) Init(ctx context.Context, nagaeRootEnv string, appName string) error {
- hmApi := NewWAVMHostAPI(n.root)
- vm, err := NewInitWAVM(ctx, hmApi, nagaeRootEnv, appName, n.logger)
- if err != nil {
- return fmt.Errorf("failed to init ngvfs: %w", err)
- }
- n.initWAVM = vm
- return n.initWAVM.Init()
- }
- func (n *OpenNagaeVFS) DeInit() error {
- if n.initWAVM == nil {
- return fmt.Errorf("deinit before init")
- }
- return n.initWAVM.DeInit()
- }
- func (n *OpenNagaeVFS) RunMount() error {
- if n.initWAVM == nil {
- return fmt.Errorf("deinit before init")
- }
- return n.initWAVM.AutoMount()
- }
|