You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							79 lines
						
					
					
						
							2.1 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							79 lines
						
					
					
						
							2.1 KiB
						
					
					
				
								package filer
							 | 
						|
								
							 | 
						|
								import (
							 | 
						|
									"bytes"
							 | 
						|
									"context"
							 | 
						|
									"time"
							 | 
						|
								
							 | 
						|
									"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
							 | 
						|
									"github.com/seaweedfs/seaweedfs/weed/wdclient"
							 | 
						|
								)
							 | 
						|
								
							 | 
						|
								func ReadEntry(masterClient *wdclient.MasterClient, filerClient filer_pb.SeaweedFilerClient, dir, name string, byteBuffer *bytes.Buffer) error {
							 | 
						|
								
							 | 
						|
									request := &filer_pb.LookupDirectoryEntryRequest{
							 | 
						|
										Directory: dir,
							 | 
						|
										Name:      name,
							 | 
						|
									}
							 | 
						|
									respLookupEntry, err := filer_pb.LookupEntry(context.Background(), filerClient, request)
							 | 
						|
									if err != nil {
							 | 
						|
										return err
							 | 
						|
									}
							 | 
						|
									if len(respLookupEntry.Entry.Content) > 0 {
							 | 
						|
										_, err = byteBuffer.Write(respLookupEntry.Entry.Content)
							 | 
						|
										return err
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									return StreamContent(masterClient, byteBuffer, respLookupEntry.Entry.GetChunks(), 0, int64(FileSize(respLookupEntry.Entry)))
							 | 
						|
								
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								func ReadInsideFiler(filerClient filer_pb.SeaweedFilerClient, dir, name string) (content []byte, err error) {
							 | 
						|
									request := &filer_pb.LookupDirectoryEntryRequest{
							 | 
						|
										Directory: dir,
							 | 
						|
										Name:      name,
							 | 
						|
									}
							 | 
						|
									respLookupEntry, err := filer_pb.LookupEntry(context.Background(), filerClient, request)
							 | 
						|
									if err != nil {
							 | 
						|
										return
							 | 
						|
									}
							 | 
						|
									content = respLookupEntry.Entry.Content
							 | 
						|
									return
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								func SaveInsideFiler(client filer_pb.SeaweedFilerClient, dir, name string, content []byte) error {
							 | 
						|
								
							 | 
						|
									resp, err := filer_pb.LookupEntry(context.Background(), client, &filer_pb.LookupDirectoryEntryRequest{
							 | 
						|
										Directory: dir,
							 | 
						|
										Name:      name,
							 | 
						|
									})
							 | 
						|
								
							 | 
						|
									if err == filer_pb.ErrNotFound {
							 | 
						|
										err = filer_pb.CreateEntry(context.Background(), client, &filer_pb.CreateEntryRequest{
							 | 
						|
											Directory: dir,
							 | 
						|
											Entry: &filer_pb.Entry{
							 | 
						|
												Name:        name,
							 | 
						|
												IsDirectory: false,
							 | 
						|
												Attributes: &filer_pb.FuseAttributes{
							 | 
						|
													Mtime:    time.Now().Unix(),
							 | 
						|
													Crtime:   time.Now().Unix(),
							 | 
						|
													FileMode: uint32(0644),
							 | 
						|
													FileSize: uint64(len(content)),
							 | 
						|
												},
							 | 
						|
												Content: content,
							 | 
						|
											},
							 | 
						|
											SkipCheckParentDirectory: false,
							 | 
						|
										})
							 | 
						|
									} else if err == nil {
							 | 
						|
										entry := resp.Entry
							 | 
						|
										entry.Content = content
							 | 
						|
										entry.Attributes.Mtime = time.Now().Unix()
							 | 
						|
										entry.Attributes.FileSize = uint64(len(content))
							 | 
						|
										err = filer_pb.UpdateEntry(context.Background(), client, &filer_pb.UpdateEntryRequest{
							 | 
						|
											Directory: dir,
							 | 
						|
											Entry:     entry,
							 | 
						|
										})
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									return err
							 | 
						|
								}
							 |