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.
		
		
		
		
		
			
		
			
				
					
					
						
							58 lines
						
					
					
						
							1.9 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							58 lines
						
					
					
						
							1.9 KiB
						
					
					
				| package filer_client | |
| 
 | |
| import ( | |
| 	"github.com/seaweedfs/seaweedfs/weed/glog" | |
| 	"github.com/seaweedfs/seaweedfs/weed/mq/topic" | |
| 	"github.com/seaweedfs/seaweedfs/weed/pb" | |
| 	"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb" | |
| 	"github.com/seaweedfs/seaweedfs/weed/pb/mq_pb" | |
| 	"google.golang.org/grpc" | |
| ) | |
| 
 | |
| type FilerClientAccessor struct { | |
| 	GetFiler          func() pb.ServerAddress | |
| 	GetGrpcDialOption func() grpc.DialOption | |
| } | |
| 
 | |
| func (fca *FilerClientAccessor) WithFilerClient(streamingMode bool, fn func(filer_pb.SeaweedFilerClient) error) error { | |
| 	return pb.WithFilerClient(streamingMode, 0, fca.GetFiler(), fca.GetGrpcDialOption(), fn) | |
| } | |
| 
 | |
| func (fca *FilerClientAccessor) SaveTopicConfToFiler(t topic.Topic, conf *mq_pb.ConfigureTopicResponse) error { | |
| 
 | |
| 	glog.V(0).Infof("save conf for topic %v to filer", t) | |
| 
 | |
| 	// save the topic configuration on filer | |
| 	return fca.WithFilerClient(false, func(client filer_pb.SeaweedFilerClient) error { | |
| 		return t.WriteConfFile(client, conf) | |
| 	}) | |
| } | |
| 
 | |
| func (fca *FilerClientAccessor) ReadTopicConfFromFiler(t topic.Topic) (conf *mq_pb.ConfigureTopicResponse, err error) { | |
| 
 | |
| 	glog.V(1).Infof("load conf for topic %v from filer", t) | |
| 
 | |
| 	if err = fca.WithFilerClient(false, func(client filer_pb.SeaweedFilerClient) error { | |
| 		conf, err = t.ReadConfFile(client) | |
| 		return err | |
| 	}); err != nil { | |
| 		return nil, err | |
| 	} | |
| 
 | |
| 	return conf, nil | |
| } | |
| 
 | |
| // ReadTopicConfFromFilerWithMetadata reads topic configuration along with file creation and modification times | |
| func (fca *FilerClientAccessor) ReadTopicConfFromFilerWithMetadata(t topic.Topic) (conf *mq_pb.ConfigureTopicResponse, createdAtNs, modifiedAtNs int64, err error) { | |
| 
 | |
| 	glog.V(1).Infof("load conf with metadata for topic %v from filer", t) | |
| 
 | |
| 	if err = fca.WithFilerClient(false, func(client filer_pb.SeaweedFilerClient) error { | |
| 		conf, createdAtNs, modifiedAtNs, err = t.ReadConfFileWithMetadata(client) | |
| 		return err | |
| 	}); err != nil { | |
| 		return nil, 0, 0, err | |
| 	} | |
| 
 | |
| 	return conf, createdAtNs, modifiedAtNs, nil | |
| }
 |