123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- package s3api
- import (
- "github.com/seaweedfs/seaweedfs/weed/s3api/s3_constants"
- "strings"
- "github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
- )
- const (
- S3TAG_PREFIX = s3_constants.AmzObjectTagging + "-"
- )
- func (s3a *S3ApiServer) getTags(parentDirectoryPath string, entryName string) (tags map[string]string, err error) {
- err = s3a.WithFilerClient(false, func(client filer_pb.SeaweedFilerClient) error {
- resp, err := filer_pb.LookupEntry(client, &filer_pb.LookupDirectoryEntryRequest{
- Directory: parentDirectoryPath,
- Name: entryName,
- })
- if err != nil {
- return err
- }
- tags = make(map[string]string)
- for k, v := range resp.Entry.Extended {
- if strings.HasPrefix(k, S3TAG_PREFIX) {
- tags[k[len(S3TAG_PREFIX):]] = string(v)
- }
- }
- return nil
- })
- return
- }
- func (s3a *S3ApiServer) setTags(parentDirectoryPath string, entryName string, tags map[string]string) (err error) {
- return s3a.WithFilerClient(false, func(client filer_pb.SeaweedFilerClient) error {
- resp, err := filer_pb.LookupEntry(client, &filer_pb.LookupDirectoryEntryRequest{
- Directory: parentDirectoryPath,
- Name: entryName,
- })
- if err != nil {
- return err
- }
- for k, _ := range resp.Entry.Extended {
- if strings.HasPrefix(k, S3TAG_PREFIX) {
- delete(resp.Entry.Extended, k)
- }
- }
- if resp.Entry.Extended == nil {
- resp.Entry.Extended = make(map[string][]byte)
- }
- for k, v := range tags {
- resp.Entry.Extended[S3TAG_PREFIX+k] = []byte(v)
- }
- return filer_pb.UpdateEntry(client, &filer_pb.UpdateEntryRequest{
- Directory: parentDirectoryPath,
- Entry: resp.Entry,
- IsFromOtherCluster: false,
- Signatures: nil,
- })
- })
- }
- func (s3a *S3ApiServer) rmTags(parentDirectoryPath string, entryName string) (err error) {
- return s3a.WithFilerClient(false, func(client filer_pb.SeaweedFilerClient) error {
- resp, err := filer_pb.LookupEntry(client, &filer_pb.LookupDirectoryEntryRequest{
- Directory: parentDirectoryPath,
- Name: entryName,
- })
- if err != nil {
- return err
- }
- hasDeletion := false
- for k, _ := range resp.Entry.Extended {
- if strings.HasPrefix(k, S3TAG_PREFIX) {
- delete(resp.Entry.Extended, k)
- hasDeletion = true
- }
- }
- if !hasDeletion {
- return nil
- }
- return filer_pb.UpdateEntry(client, &filer_pb.UpdateEntryRequest{
- Directory: parentDirectoryPath,
- Entry: resp.Entry,
- IsFromOtherCluster: false,
- Signatures: nil,
- })
- })
- }
|