github.com/geniusesgroup/libgo@v0.0.0-20220713101832-828057a9d3d4/object/directory.go (about)

     1  /* For license and copyright information please see LEGAL file in repository */
     2  
     3  package object
     4  
     5  import (
     6  	"../protocol"
     7  )
     8  
     9  // Directory implement protocol.ObjectDirectory to be distributed object storage
    10  type Directory struct{}
    11  
    12  // Get return the whole object as metadata and data
    13  func (dir *Directory) Get(uuid [32]byte, structureID uint64) (obj protocol.Object, err protocol.Error) {
    14  	// TODO::: First read from local OS (related lib) as cache
    15  
    16  	var req = GetRequest{
    17  		objectID:          uuid,
    18  		objectStructureID: structureID,
    19  	}
    20  	obj, err = GetService.DoSRPC(req)
    21  	if err != nil {
    22  		return
    23  	}
    24  
    25  	// TODO::: Write to local OS as cache if not enough storage exist do GC(Garbage Collector)
    26  	return
    27  }
    28  
    29  // Read return requested part of object data.
    30  func (dir *Directory) Read(uuid [32]byte, osID uint64, offset, limit uint64) (data []byte, err protocol.Error) {
    31  	// TODO::: First read from local storage as cache
    32  
    33  	var req = ReadRequest{
    34  		objectID:          uuid,
    35  		objectStructureID: osID,
    36  		offset:            offset,
    37  		limit:             limit,
    38  	}
    39  	var res readResponse
    40  	res, err = ReadService.DoSRPC(req)
    41  	if err != nil {
    42  		return
    43  	}
    44  	data = res.Data()
    45  	return
    46  }
    47  
    48  func (dir *Directory) Save(data protocol.Codec) (metadata protocol.ObjectMetadata, err protocol.Error) {
    49  	return SaveService.DoSRPC(data)
    50  }
    51  
    52  // Delete delete the object by object-UUID
    53  func (dir *Directory) Delete(uuid [32]byte, structureID uint64) (err protocol.Error) {
    54  	var req = DeleteRequest{
    55  		requestType:       RequestTypeBroadcast,
    56  		objectID:          uuid,
    57  		objectStructureID: structureID,
    58  	}
    59  	err = DeleteService.DoSRPC(req)
    60  	return
    61  }
    62  
    63  // Wipe make invisible by remove from primary index & write random data to object location
    64  func (dir *Directory) Wipe(uuid [32]byte, structureID uint64) (err protocol.Error) {
    65  	return
    66  }