12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- package amntfs
- import (
- "git.swzry.com/ProjectNagae/FsUtils/mountree"
- "github.com/GUAIK-ORG/go-snowflake/snowflake"
- "github.com/spf13/afero"
- )
- var _ afero.Fs = (*AMNTFS)(nil)
- type AMNTFS struct {
- mountTree *mountree.SimpleUnixLikePathTree[*MountNode]
- snowflaker *snowflake.Snowflake
- }
- func NewAMNTFS() *AMNTFS {
- sn, err := snowflake.NewSnowflake(0, 0)
- if err != nil {
- panic(err)
- }
- fs := &AMNTFS{
- mountTree: mountree.NewSimpleUnixLikePathTree[*MountNode](),
- snowflaker: sn,
- }
- return fs
- }
- func (fs *AMNTFS) Mount(path string, childFs afero.Fs, forceRemountExists bool) error {
- node := &MountNode{
- mountId: fs.snowflaker.NextVal(),
- mountPoint: path,
- filesystemType: childFs.Name(),
- filesystem: childFs,
- }
- err := fs.mountTree.Mount(path, node, forceRemountExists)
- if err != nil {
- if mountree.CheckErrorType(err, mountree.ErrMountPointAlreadyExists) {
- return NewAMNTFSError(ErrMountPointAlreadyMounted, nil)
- } else {
- return NewAMNTFSError(ErrUnknownInternalError, err)
- }
- }
- return nil
- }
- func (fs *AMNTFS) Umount(path string) error {
- err := fs.mountTree.Umount(path)
- if err != nil {
- if mountree.CheckErrorType(err, mountree.ErrMountPointNotExists) {
- return NewAMNTFSError(ErrMountPointAlreadyMounted, nil)
- } else {
- return NewAMNTFSError(ErrUnknownInternalError, err)
- }
- }
- return nil
- }
- func (fs *AMNTFS) ListAllMount() []MountInfoEntity {
- mil := make([]MountInfoEntity, 0)
- fs.mountTree.ListAllMount(func(path string, payload *MountNode) {
- mil = append(mil, MountInfoEntity{
- MountId: payload.MountId(),
- MountPoint: payload.MountPoint(),
- FsType: payload.FsType(),
- })
- })
- return mil
- }
- func (fs *AMNTFS) getMountEntity(path string) (*MountNode, string) {
- p, remain, err := fs.mountTree.GetPayload(path)
- if err != nil {
- return nil, ""
- }
- return *p, remain
- }
|