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.
		
		
		
		
		
			
		
			
				
					
					
						
							75 lines
						
					
					
						
							1.4 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							75 lines
						
					
					
						
							1.4 KiB
						
					
					
				| package main | |
| 
 | |
| import ( | |
| 	"flag" | |
| 	"fmt" | |
| 	"io" | |
| 	"log" | |
| 	"os" | |
| 
 | |
| 	"github.com/golang/protobuf/proto" | |
| 
 | |
| 	"github.com/seaweedfs/seaweedfs/weed/filer" | |
| 	"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb" | |
| 	"github.com/seaweedfs/seaweedfs/weed/util" | |
| ) | |
| 
 | |
| var ( | |
| 	logdataFile = flag.String("logdata", "", "log data file saved under "+filer.SystemLogDir) | |
| ) | |
| 
 | |
| func main() { | |
| 	flag.Parse() | |
| 
 | |
| 	dst, err := os.OpenFile(*logdataFile, os.O_RDONLY, 0644) | |
| 	if err != nil { | |
| 		log.Fatalf("failed to open %s: %v", *logdataFile, err) | |
| 	} | |
| 	defer dst.Close() | |
| 
 | |
| 	err = walkLogEntryFile(dst) | |
| 	if err != nil { | |
| 		log.Fatalf("failed to visit %s: %v", *logdataFile, err) | |
| 	} | |
| 
 | |
| } | |
| 
 | |
| func walkLogEntryFile(dst *os.File) error { | |
| 
 | |
| 	sizeBuf := make([]byte, 4) | |
| 
 | |
| 	for { | |
| 		if n, err := dst.Read(sizeBuf); n != 4 { | |
| 			if err == io.EOF { | |
| 				return nil | |
| 			} | |
| 			return err | |
| 		} | |
| 
 | |
| 		size := util.BytesToUint32(sizeBuf) | |
| 
 | |
| 		data := make([]byte, int(size)) | |
| 
 | |
| 		if n, err := dst.Read(data); n != len(data) { | |
| 			return err | |
| 		} | |
| 
 | |
| 		logEntry := &filer_pb.LogEntry{} | |
| 		err := proto.Unmarshal(data, logEntry) | |
| 		if err != nil { | |
| 			log.Printf("unexpected unmarshal filer_pb.LogEntry: %v", err) | |
| 			return nil | |
| 		} | |
| 
 | |
| 		event := &filer_pb.SubscribeMetadataResponse{} | |
| 		err = proto.Unmarshal(logEntry.Data, event) | |
| 		if err != nil { | |
| 			log.Printf("unexpected unmarshal filer_pb.SubscribeMetadataResponse: %v", err) | |
| 			return nil | |
| 		} | |
| 
 | |
| 		fmt.Printf("event: %+v\n", event) | |
| 
 | |
| 	} | |
| 
 | |
| }
 |