refactoring

This commit is contained in:
Chris Lu 2020-04-12 21:00:55 -07:00
parent 8e23dc078b
commit 7764e0465c
16 changed files with 186 additions and 187 deletions

View file

@ -42,7 +42,7 @@ service SeaweedFiler {
rpc GetFilerConfiguration (GetFilerConfigurationRequest) returns (GetFilerConfigurationResponse) { rpc GetFilerConfiguration (GetFilerConfigurationRequest) returns (GetFilerConfigurationResponse) {
} }
rpc ListenForEvents (ListenForEventsRequest) returns (stream FullEventNotification) { rpc SubscribeMetadata (SubscribeMetadataRequest) returns (stream SubscribeMetadataResponse) {
} }
} }
@ -234,12 +234,12 @@ message GetFilerConfigurationResponse {
bool cipher = 7; bool cipher = 7;
} }
message ListenForEventsRequest { message SubscribeMetadataRequest {
string client_name = 1; string client_name = 1;
string path_prefix = 2; string path_prefix = 2;
int64 since_ns = 3; int64 since_ns = 3;
} }
message FullEventNotification { message SubscribeMetadataResponse {
string directory = 1; string directory = 1;
EventNotification event_notification = 2; EventNotification event_notification = 2;
} }

View file

@ -61,10 +61,10 @@ func walkLogEntryFile(dst *os.File) error {
return nil return nil
} }
event := &filer_pb.FullEventNotification{} event := &filer_pb.SubscribeMetadataResponse{}
err = proto.Unmarshal(logEntry.Data, event) err = proto.Unmarshal(logEntry.Data, event)
if err != nil { if err != nil {
log.Printf("unexpected unmarshal filer_pb.FullEventNotification: %v", err) log.Printf("unexpected unmarshal filer_pb.SubscribeMetadataResponse: %v", err)
return nil return nil
} }

View file

@ -34,7 +34,7 @@ func runWatch(cmd *Command, args []string) bool {
watchErr := pb.WithFilerClient(*watchFiler, grpcDialOption, func(client filer_pb.SeaweedFilerClient) error { watchErr := pb.WithFilerClient(*watchFiler, grpcDialOption, func(client filer_pb.SeaweedFilerClient) error {
stream, err := client.ListenForEvents(context.Background(), &filer_pb.ListenForEventsRequest{ stream, err := client.SubscribeMetadata(context.Background(), &filer_pb.SubscribeMetadataRequest{
ClientName: "watch", ClientName: "watch",
PathPrefix: *watchTarget, PathPrefix: *watchTarget,
SinceNs: 0, SinceNs: 0,

View file

@ -53,13 +53,13 @@ func (f *Filer) logMetaEvent(fullpath string, eventNotification *filer_pb.EventN
dir, _ := util.FullPath(fullpath).DirAndName() dir, _ := util.FullPath(fullpath).DirAndName()
event := &filer_pb.FullEventNotification{ event := &filer_pb.SubscribeMetadataResponse{
Directory: dir, Directory: dir,
EventNotification: eventNotification, EventNotification: eventNotification,
} }
data, err := proto.Marshal(event) data, err := proto.Marshal(event)
if err != nil { if err != nil {
glog.Errorf("failed to marshal filer_pb.FullEventNotification %+v: %v", event, err) glog.Errorf("failed to marshal filer_pb.SubscribeMetadataResponse %+v: %v", event, err)
return return
} }
@ -97,11 +97,11 @@ func (f *Filer) ReadLogBuffer(lastReadTime time.Time, eachEventFn func(fullpath
return lastReadTime, fmt.Errorf("unexpected unmarshal filer_pb.LogEntry: %v", err) return lastReadTime, fmt.Errorf("unexpected unmarshal filer_pb.LogEntry: %v", err)
} }
event := &filer_pb.FullEventNotification{} event := &filer_pb.SubscribeMetadataResponse{}
err = proto.Unmarshal(logEntry.Data, event) err = proto.Unmarshal(logEntry.Data, event)
if err != nil { if err != nil {
glog.Errorf("unexpected unmarshal filer_pb.FullEventNotification: %v", err) glog.Errorf("unexpected unmarshal filer_pb.SubscribeMetadataResponse: %v", err)
return lastReadTime, fmt.Errorf("unexpected unmarshal filer_pb.FullEventNotification: %v", err) return lastReadTime, fmt.Errorf("unexpected unmarshal filer_pb.SubscribeMetadataResponse: %v", err)
} }
err = eachEventFn(event.Directory, event.EventNotification) err = eachEventFn(event.Directory, event.EventNotification)

View file

@ -1,6 +1,6 @@
package filer2 package filer2
const( const (
TopicsDir = "/topics" TopicsDir = "/topics"
SystemLogDir = TopicsDir + "/.system/log" SystemLogDir = TopicsDir + "/.system/log"
) )

View file

@ -62,7 +62,6 @@ func (c *FsCache) doSetFsNode(path util.FullPath, node fs.Node) {
t.node = node t.node = node
} }
func (c *FsCache) EnsureFsNode(path util.FullPath, genNodeFn func() fs.Node) fs.Node { func (c *FsCache) EnsureFsNode(path util.FullPath, genNodeFn func() fs.Node) fs.Node {
c.Lock() c.Lock()

View file

@ -42,7 +42,7 @@ service SeaweedFiler {
rpc GetFilerConfiguration (GetFilerConfigurationRequest) returns (GetFilerConfigurationResponse) { rpc GetFilerConfiguration (GetFilerConfigurationRequest) returns (GetFilerConfigurationResponse) {
} }
rpc ListenForEvents (ListenForEventsRequest) returns (stream FullEventNotification) { rpc SubscribeMetadata (SubscribeMetadataRequest) returns (stream SubscribeMetadataResponse) {
} }
} }
@ -234,12 +234,12 @@ message GetFilerConfigurationResponse {
bool cipher = 7; bool cipher = 7;
} }
message ListenForEventsRequest { message SubscribeMetadataRequest {
string client_name = 1; string client_name = 1;
string path_prefix = 2; string path_prefix = 2;
int64 since_ns = 3; int64 since_ns = 3;
} }
message FullEventNotification { message SubscribeMetadataResponse {
string directory = 1; string directory = 1;
EventNotification event_notification = 2; EventNotification event_notification = 2;
} }

View file

@ -39,8 +39,8 @@ It has these top-level messages:
StatisticsResponse StatisticsResponse
GetFilerConfigurationRequest GetFilerConfigurationRequest
GetFilerConfigurationResponse GetFilerConfigurationResponse
ListenForEventsRequest SubscribeMetadataRequest
FullEventNotification SubscribeMetadataResponse
LogEntry LogEntry
*/ */
package filer_pb package filer_pb
@ -1090,56 +1090,56 @@ func (m *GetFilerConfigurationResponse) GetCipher() bool {
return false return false
} }
type ListenForEventsRequest struct { type SubscribeMetadataRequest struct {
ClientName string `protobuf:"bytes,1,opt,name=client_name,json=clientName" json:"client_name,omitempty"` ClientName string `protobuf:"bytes,1,opt,name=client_name,json=clientName" json:"client_name,omitempty"`
PathPrefix string `protobuf:"bytes,2,opt,name=path_prefix,json=pathPrefix" json:"path_prefix,omitempty"` PathPrefix string `protobuf:"bytes,2,opt,name=path_prefix,json=pathPrefix" json:"path_prefix,omitempty"`
SinceNs int64 `protobuf:"varint,3,opt,name=since_ns,json=sinceNs" json:"since_ns,omitempty"` SinceNs int64 `protobuf:"varint,3,opt,name=since_ns,json=sinceNs" json:"since_ns,omitempty"`
} }
func (m *ListenForEventsRequest) Reset() { *m = ListenForEventsRequest{} } func (m *SubscribeMetadataRequest) Reset() { *m = SubscribeMetadataRequest{} }
func (m *ListenForEventsRequest) String() string { return proto.CompactTextString(m) } func (m *SubscribeMetadataRequest) String() string { return proto.CompactTextString(m) }
func (*ListenForEventsRequest) ProtoMessage() {} func (*SubscribeMetadataRequest) ProtoMessage() {}
func (*ListenForEventsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} } func (*SubscribeMetadataRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} }
func (m *ListenForEventsRequest) GetClientName() string { func (m *SubscribeMetadataRequest) GetClientName() string {
if m != nil { if m != nil {
return m.ClientName return m.ClientName
} }
return "" return ""
} }
func (m *ListenForEventsRequest) GetPathPrefix() string { func (m *SubscribeMetadataRequest) GetPathPrefix() string {
if m != nil { if m != nil {
return m.PathPrefix return m.PathPrefix
} }
return "" return ""
} }
func (m *ListenForEventsRequest) GetSinceNs() int64 { func (m *SubscribeMetadataRequest) GetSinceNs() int64 {
if m != nil { if m != nil {
return m.SinceNs return m.SinceNs
} }
return 0 return 0
} }
type FullEventNotification struct { type SubscribeMetadataResponse struct {
Directory string `protobuf:"bytes,1,opt,name=directory" json:"directory,omitempty"` Directory string `protobuf:"bytes,1,opt,name=directory" json:"directory,omitempty"`
EventNotification *EventNotification `protobuf:"bytes,2,opt,name=event_notification,json=eventNotification" json:"event_notification,omitempty"` EventNotification *EventNotification `protobuf:"bytes,2,opt,name=event_notification,json=eventNotification" json:"event_notification,omitempty"`
} }
func (m *FullEventNotification) Reset() { *m = FullEventNotification{} } func (m *SubscribeMetadataResponse) Reset() { *m = SubscribeMetadataResponse{} }
func (m *FullEventNotification) String() string { return proto.CompactTextString(m) } func (m *SubscribeMetadataResponse) String() string { return proto.CompactTextString(m) }
func (*FullEventNotification) ProtoMessage() {} func (*SubscribeMetadataResponse) ProtoMessage() {}
func (*FullEventNotification) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} } func (*SubscribeMetadataResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} }
func (m *FullEventNotification) GetDirectory() string { func (m *SubscribeMetadataResponse) GetDirectory() string {
if m != nil { if m != nil {
return m.Directory return m.Directory
} }
return "" return ""
} }
func (m *FullEventNotification) GetEventNotification() *EventNotification { func (m *SubscribeMetadataResponse) GetEventNotification() *EventNotification {
if m != nil { if m != nil {
return m.EventNotification return m.EventNotification
} }
@ -1209,8 +1209,8 @@ func init() {
proto.RegisterType((*StatisticsResponse)(nil), "filer_pb.StatisticsResponse") proto.RegisterType((*StatisticsResponse)(nil), "filer_pb.StatisticsResponse")
proto.RegisterType((*GetFilerConfigurationRequest)(nil), "filer_pb.GetFilerConfigurationRequest") proto.RegisterType((*GetFilerConfigurationRequest)(nil), "filer_pb.GetFilerConfigurationRequest")
proto.RegisterType((*GetFilerConfigurationResponse)(nil), "filer_pb.GetFilerConfigurationResponse") proto.RegisterType((*GetFilerConfigurationResponse)(nil), "filer_pb.GetFilerConfigurationResponse")
proto.RegisterType((*ListenForEventsRequest)(nil), "filer_pb.ListenForEventsRequest") proto.RegisterType((*SubscribeMetadataRequest)(nil), "filer_pb.SubscribeMetadataRequest")
proto.RegisterType((*FullEventNotification)(nil), "filer_pb.FullEventNotification") proto.RegisterType((*SubscribeMetadataResponse)(nil), "filer_pb.SubscribeMetadataResponse")
proto.RegisterType((*LogEntry)(nil), "filer_pb.LogEntry") proto.RegisterType((*LogEntry)(nil), "filer_pb.LogEntry")
} }
@ -1236,7 +1236,7 @@ type SeaweedFilerClient interface {
DeleteCollection(ctx context.Context, in *DeleteCollectionRequest, opts ...grpc.CallOption) (*DeleteCollectionResponse, error) DeleteCollection(ctx context.Context, in *DeleteCollectionRequest, opts ...grpc.CallOption) (*DeleteCollectionResponse, error)
Statistics(ctx context.Context, in *StatisticsRequest, opts ...grpc.CallOption) (*StatisticsResponse, error) Statistics(ctx context.Context, in *StatisticsRequest, opts ...grpc.CallOption) (*StatisticsResponse, error)
GetFilerConfiguration(ctx context.Context, in *GetFilerConfigurationRequest, opts ...grpc.CallOption) (*GetFilerConfigurationResponse, error) GetFilerConfiguration(ctx context.Context, in *GetFilerConfigurationRequest, opts ...grpc.CallOption) (*GetFilerConfigurationResponse, error)
ListenForEvents(ctx context.Context, in *ListenForEventsRequest, opts ...grpc.CallOption) (SeaweedFiler_ListenForEventsClient, error) SubscribeMetadata(ctx context.Context, in *SubscribeMetadataRequest, opts ...grpc.CallOption) (SeaweedFiler_SubscribeMetadataClient, error)
} }
type seaweedFilerClient struct { type seaweedFilerClient struct {
@ -1369,12 +1369,12 @@ func (c *seaweedFilerClient) GetFilerConfiguration(ctx context.Context, in *GetF
return out, nil return out, nil
} }
func (c *seaweedFilerClient) ListenForEvents(ctx context.Context, in *ListenForEventsRequest, opts ...grpc.CallOption) (SeaweedFiler_ListenForEventsClient, error) { func (c *seaweedFilerClient) SubscribeMetadata(ctx context.Context, in *SubscribeMetadataRequest, opts ...grpc.CallOption) (SeaweedFiler_SubscribeMetadataClient, error) {
stream, err := grpc.NewClientStream(ctx, &_SeaweedFiler_serviceDesc.Streams[1], c.cc, "/filer_pb.SeaweedFiler/ListenForEvents", opts...) stream, err := grpc.NewClientStream(ctx, &_SeaweedFiler_serviceDesc.Streams[1], c.cc, "/filer_pb.SeaweedFiler/SubscribeMetadata", opts...)
if err != nil { if err != nil {
return nil, err return nil, err
} }
x := &seaweedFilerListenForEventsClient{stream} x := &seaweedFilerSubscribeMetadataClient{stream}
if err := x.ClientStream.SendMsg(in); err != nil { if err := x.ClientStream.SendMsg(in); err != nil {
return nil, err return nil, err
} }
@ -1384,17 +1384,17 @@ func (c *seaweedFilerClient) ListenForEvents(ctx context.Context, in *ListenForE
return x, nil return x, nil
} }
type SeaweedFiler_ListenForEventsClient interface { type SeaweedFiler_SubscribeMetadataClient interface {
Recv() (*FullEventNotification, error) Recv() (*SubscribeMetadataResponse, error)
grpc.ClientStream grpc.ClientStream
} }
type seaweedFilerListenForEventsClient struct { type seaweedFilerSubscribeMetadataClient struct {
grpc.ClientStream grpc.ClientStream
} }
func (x *seaweedFilerListenForEventsClient) Recv() (*FullEventNotification, error) { func (x *seaweedFilerSubscribeMetadataClient) Recv() (*SubscribeMetadataResponse, error) {
m := new(FullEventNotification) m := new(SubscribeMetadataResponse)
if err := x.ClientStream.RecvMsg(m); err != nil { if err := x.ClientStream.RecvMsg(m); err != nil {
return nil, err return nil, err
} }
@ -1415,7 +1415,7 @@ type SeaweedFilerServer interface {
DeleteCollection(context.Context, *DeleteCollectionRequest) (*DeleteCollectionResponse, error) DeleteCollection(context.Context, *DeleteCollectionRequest) (*DeleteCollectionResponse, error)
Statistics(context.Context, *StatisticsRequest) (*StatisticsResponse, error) Statistics(context.Context, *StatisticsRequest) (*StatisticsResponse, error)
GetFilerConfiguration(context.Context, *GetFilerConfigurationRequest) (*GetFilerConfigurationResponse, error) GetFilerConfiguration(context.Context, *GetFilerConfigurationRequest) (*GetFilerConfigurationResponse, error)
ListenForEvents(*ListenForEventsRequest, SeaweedFiler_ListenForEventsServer) error SubscribeMetadata(*SubscribeMetadataRequest, SeaweedFiler_SubscribeMetadataServer) error
} }
func RegisterSeaweedFilerServer(s *grpc.Server, srv SeaweedFilerServer) { func RegisterSeaweedFilerServer(s *grpc.Server, srv SeaweedFilerServer) {
@ -1623,24 +1623,24 @@ func _SeaweedFiler_GetFilerConfiguration_Handler(srv interface{}, ctx context.Co
return interceptor(ctx, in, info, handler) return interceptor(ctx, in, info, handler)
} }
func _SeaweedFiler_ListenForEvents_Handler(srv interface{}, stream grpc.ServerStream) error { func _SeaweedFiler_SubscribeMetadata_Handler(srv interface{}, stream grpc.ServerStream) error {
m := new(ListenForEventsRequest) m := new(SubscribeMetadataRequest)
if err := stream.RecvMsg(m); err != nil { if err := stream.RecvMsg(m); err != nil {
return err return err
} }
return srv.(SeaweedFilerServer).ListenForEvents(m, &seaweedFilerListenForEventsServer{stream}) return srv.(SeaweedFilerServer).SubscribeMetadata(m, &seaweedFilerSubscribeMetadataServer{stream})
} }
type SeaweedFiler_ListenForEventsServer interface { type SeaweedFiler_SubscribeMetadataServer interface {
Send(*FullEventNotification) error Send(*SubscribeMetadataResponse) error
grpc.ServerStream grpc.ServerStream
} }
type seaweedFilerListenForEventsServer struct { type seaweedFilerSubscribeMetadataServer struct {
grpc.ServerStream grpc.ServerStream
} }
func (x *seaweedFilerListenForEventsServer) Send(m *FullEventNotification) error { func (x *seaweedFilerSubscribeMetadataServer) Send(m *SubscribeMetadataResponse) error {
return x.ServerStream.SendMsg(m) return x.ServerStream.SendMsg(m)
} }
@ -1696,8 +1696,8 @@ var _SeaweedFiler_serviceDesc = grpc.ServiceDesc{
ServerStreams: true, ServerStreams: true,
}, },
{ {
StreamName: "ListenForEvents", StreamName: "SubscribeMetadata",
Handler: _SeaweedFiler_ListenForEvents_Handler, Handler: _SeaweedFiler_SubscribeMetadata_Handler,
ServerStreams: true, ServerStreams: true,
}, },
}, },
@ -1709,122 +1709,122 @@ func init() { proto.RegisterFile("filer.proto", fileDescriptor0) }
var fileDescriptor0 = []byte{ var fileDescriptor0 = []byte{
// 1903 bytes of a gzipped FileDescriptorProto // 1903 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xb4, 0x58, 0x5f, 0x6f, 0xdc, 0xc6, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xb4, 0x58, 0x5f, 0x6f, 0xdc, 0xc6,
0x11, 0x37, 0xef, 0x74, 0x7f, 0x38, 0x77, 0xe7, 0x48, 0x7b, 0x92, 0x73, 0x3e, 0x4b, 0xb6, 0x42, 0x11, 0x37, 0xef, 0x3f, 0xe7, 0xee, 0x1c, 0x69, 0x4f, 0x4e, 0x4e, 0x67, 0xc9, 0x51, 0xe8, 0x3a,
0xd7, 0xa9, 0x0b, 0x1b, 0xaa, 0xa1, 0xa6, 0x40, 0xd2, 0xb4, 0x0f, 0xb6, 0x2c, 0xa5, 0x6e, 0x6c, 0x75, 0x61, 0x43, 0x35, 0xd4, 0x14, 0x48, 0x9a, 0xf6, 0xc1, 0x96, 0xe5, 0xd4, 0x8d, 0xad, 0x18,
0xc5, 0xa0, 0xec, 0x22, 0x45, 0x81, 0x12, 0x14, 0xb9, 0xba, 0xdb, 0x8a, 0x47, 0xb2, 0xbb, 0x4b, 0x94, 0x5d, 0xb4, 0x28, 0x50, 0x96, 0x47, 0xae, 0xee, 0xb6, 0xe2, 0x91, 0xec, 0xee, 0x52, 0x7f,
0xfd, 0xc9, 0x53, 0xfb, 0x35, 0x0a, 0xf4, 0xa1, 0xdf, 0xa1, 0x8f, 0x45, 0x5f, 0x8a, 0x02, 0x05, 0xf2, 0xd4, 0x97, 0x7e, 0x89, 0x02, 0xfd, 0x00, 0x7d, 0xef, 0x63, 0xd1, 0x97, 0xa2, 0x40, 0x81,
0xfa, 0x2d, 0xfa, 0x49, 0x8a, 0x9d, 0x25, 0x79, 0xcb, 0xe3, 0x49, 0x4a, 0x50, 0xe4, 0x6d, 0x77, 0x7e, 0x8b, 0x7e, 0x92, 0x62, 0x67, 0x49, 0xde, 0xf2, 0xfe, 0x48, 0x09, 0x8a, 0xbc, 0xed, 0xce,
0x66, 0x76, 0x76, 0x76, 0xfe, 0xfc, 0x66, 0x48, 0xe8, 0x9d, 0xb0, 0x88, 0xf2, 0x9d, 0x94, 0x27, 0xcc, 0xce, 0xce, 0xce, 0x9f, 0xdf, 0x0c, 0x09, 0xdd, 0x53, 0x16, 0x51, 0xbe, 0x9f, 0xf2, 0x44,
0x32, 0x21, 0x5d, 0xdc, 0x78, 0xe9, 0xb1, 0xf3, 0x15, 0xdc, 0x7b, 0x9d, 0x24, 0xa7, 0x59, 0xfa, 0x26, 0xa4, 0x83, 0x1b, 0x2f, 0x1d, 0x3b, 0x5f, 0xc1, 0xdd, 0x57, 0x49, 0x72, 0x96, 0xa5, 0xcf,
0x92, 0x71, 0x1a, 0xc8, 0x84, 0x5f, 0xee, 0xc7, 0x92, 0x5f, 0xba, 0xf4, 0x0f, 0x19, 0x15, 0x92, 0x19, 0xa7, 0x81, 0x4c, 0xf8, 0xd5, 0x51, 0x2c, 0xf9, 0x95, 0x4b, 0xff, 0x90, 0x51, 0x21, 0xc9,
0x6c, 0x82, 0x1d, 0x16, 0x8c, 0x91, 0xb5, 0x6d, 0x3d, 0xb6, 0xdd, 0x39, 0x81, 0x10, 0x58, 0x89, 0x0e, 0xd8, 0x61, 0xc1, 0x18, 0x5a, 0x7b, 0xd6, 0x43, 0xdb, 0x9d, 0x13, 0x08, 0x81, 0x46, 0xec,
0xfd, 0x19, 0x1d, 0x35, 0x90, 0x81, 0x6b, 0x67, 0x1f, 0x36, 0x97, 0x2b, 0x14, 0x69, 0x12, 0x0b, 0xcf, 0xe8, 0xb0, 0x86, 0x0c, 0x5c, 0x3b, 0x47, 0xb0, 0xb3, 0x5a, 0xa1, 0x48, 0x93, 0x58, 0x50,
0x4a, 0x1e, 0x41, 0x8b, 0x2a, 0x02, 0x6a, 0xeb, 0xed, 0x7e, 0xb0, 0x53, 0x98, 0xb2, 0xa3, 0xe5, 0xf2, 0x00, 0x9a, 0x54, 0x11, 0x50, 0x5b, 0xf7, 0xe0, 0xbd, 0xfd, 0xc2, 0x94, 0x7d, 0x2d, 0xa7,
0x34, 0xd7, 0xf9, 0x87, 0x05, 0xe4, 0x35, 0x13, 0x52, 0x11, 0x19, 0x15, 0xdf, 0xce, 0x9e, 0x3b, 0xb9, 0xce, 0x3f, 0x2c, 0x20, 0xaf, 0x98, 0x90, 0x8a, 0xc8, 0xa8, 0xf8, 0x66, 0xf6, 0xbc, 0x0f,
0xd0, 0x4e, 0x39, 0x3d, 0x61, 0x17, 0xb9, 0x45, 0xf9, 0x8e, 0x3c, 0x85, 0x35, 0x21, 0x7d, 0x2e, 0xad, 0x94, 0xd3, 0x53, 0x76, 0x99, 0x5b, 0x94, 0xef, 0xc8, 0x63, 0xd8, 0x14, 0xd2, 0xe7, 0xf2,
0x0f, 0x78, 0x32, 0x3b, 0x60, 0x11, 0x3d, 0x54, 0x46, 0x37, 0x51, 0xa4, 0xce, 0x20, 0x3b, 0x40, 0x05, 0x4f, 0x66, 0x2f, 0x58, 0x44, 0x8f, 0x95, 0xd1, 0x75, 0x14, 0x59, 0x66, 0x90, 0x7d, 0x20,
0x58, 0x1c, 0x44, 0x99, 0x60, 0x67, 0xf4, 0xa8, 0xe0, 0x8e, 0x56, 0xb6, 0xad, 0xc7, 0x5d, 0x77, 0x2c, 0x0e, 0xa2, 0x4c, 0xb0, 0x73, 0x7a, 0x52, 0x70, 0x87, 0x8d, 0x3d, 0xeb, 0x61, 0xc7, 0x5d,
0x09, 0x87, 0xac, 0x43, 0x2b, 0x62, 0x33, 0x26, 0x47, 0xad, 0x6d, 0xeb, 0xf1, 0xc0, 0xd5, 0x1b, 0xc1, 0x21, 0x5b, 0xd0, 0x8c, 0xd8, 0x8c, 0xc9, 0x61, 0x73, 0xcf, 0x7a, 0xd8, 0x77, 0xf5, 0xc6,
0xe7, 0xe7, 0x30, 0xac, 0xd8, 0xff, 0xdd, 0x9e, 0xff, 0x97, 0x06, 0xb4, 0x90, 0x50, 0xfa, 0xd8, 0xf9, 0x29, 0x0c, 0x2a, 0xf6, 0x7f, 0xbb, 0xe7, 0xff, 0xa5, 0x06, 0x4d, 0x24, 0x94, 0x3e, 0xb6,
0x9a, 0xfb, 0x98, 0x7c, 0x04, 0x7d, 0x26, 0xbc, 0xb9, 0x23, 0x1a, 0x68, 0x5b, 0x8f, 0x89, 0xd2, 0xe6, 0x3e, 0x26, 0x1f, 0x41, 0x8f, 0x09, 0x6f, 0xee, 0x88, 0x1a, 0xda, 0xd6, 0x65, 0xa2, 0xf4,
0xe7, 0xe4, 0x09, 0xb4, 0x83, 0x69, 0x16, 0x9f, 0x8a, 0x51, 0x73, 0xbb, 0xf9, 0xb8, 0xb7, 0x3b, 0x39, 0x79, 0x04, 0xad, 0x60, 0x9a, 0xc5, 0x67, 0x62, 0x58, 0xdf, 0xab, 0x3f, 0xec, 0x1e, 0x0c,
0x9c, 0x5f, 0xa4, 0x1e, 0xba, 0xa7, 0x78, 0x6e, 0x2e, 0x42, 0x3e, 0x05, 0xf0, 0xa5, 0xe4, 0xec, 0xe6, 0x17, 0xa9, 0x87, 0x1e, 0x2a, 0x9e, 0x9b, 0x8b, 0x90, 0x4f, 0x01, 0x7c, 0x29, 0x39, 0x1b,
0x38, 0x93, 0x54, 0xe0, 0x4b, 0x7b, 0xbb, 0x23, 0xe3, 0x40, 0x26, 0xe8, 0xf3, 0x92, 0xef, 0x1a, 0x67, 0x92, 0x0a, 0x7c, 0x69, 0xf7, 0x60, 0x68, 0x1c, 0xc8, 0x04, 0x7d, 0x5a, 0xf2, 0x5d, 0x43,
0xb2, 0xe4, 0x33, 0xe8, 0xd2, 0x0b, 0x49, 0xe3, 0x90, 0x86, 0xa3, 0x16, 0x5e, 0xb4, 0xb5, 0xf0, 0x96, 0x7c, 0x06, 0x1d, 0x7a, 0x29, 0x69, 0x1c, 0xd2, 0x70, 0xd8, 0xc4, 0x8b, 0x76, 0x17, 0x5e,
0xa2, 0x9d, 0xfd, 0x9c, 0xaf, 0xdf, 0x57, 0x8a, 0x8f, 0x3f, 0x87, 0x41, 0x85, 0x45, 0x56, 0xa1, 0xb4, 0x7f, 0x94, 0xf3, 0xf5, 0xfb, 0x4a, 0xf1, 0xd1, 0xe7, 0xd0, 0xaf, 0xb0, 0xc8, 0x06, 0xd4,
0x79, 0x4a, 0x8b, 0xa8, 0xaa, 0xa5, 0xf2, 0xec, 0x99, 0x1f, 0x65, 0x3a, 0xc1, 0xfa, 0xae, 0xde, 0xcf, 0x68, 0x11, 0x55, 0xb5, 0x54, 0x9e, 0x3d, 0xf7, 0xa3, 0x4c, 0x27, 0x58, 0xcf, 0xd5, 0x9b,
0xfc, 0xac, 0xf1, 0xa9, 0xe5, 0xbc, 0x04, 0xfb, 0x20, 0x8b, 0xa2, 0xf2, 0x60, 0xc8, 0x78, 0x71, 0x9f, 0xd4, 0x3e, 0xb5, 0x9c, 0xe7, 0x60, 0xbf, 0xc8, 0xa2, 0xa8, 0x3c, 0x18, 0x32, 0x5e, 0x1c,
0x30, 0x64, 0x7c, 0xee, 0xe5, 0xc6, 0xb5, 0x5e, 0xfe, 0xbb, 0x05, 0x6b, 0xfb, 0x67, 0x34, 0x96, 0x0c, 0x19, 0x9f, 0x7b, 0xb9, 0x76, 0xad, 0x97, 0xff, 0x6e, 0xc1, 0xe6, 0xd1, 0x39, 0x8d, 0xe5,
0x87, 0x89, 0x64, 0x27, 0x2c, 0xf0, 0x25, 0x4b, 0x62, 0xf2, 0x14, 0xec, 0x24, 0x0a, 0xbd, 0x6b, 0x71, 0x22, 0xd9, 0x29, 0x0b, 0x7c, 0xc9, 0x92, 0x98, 0x3c, 0x06, 0x3b, 0x89, 0x42, 0xef, 0xda,
0xc3, 0xd4, 0x4d, 0xa2, 0xdc, 0xea, 0xa7, 0x60, 0xc7, 0xf4, 0xdc, 0xbb, 0xf6, 0xba, 0x6e, 0x4c, 0x30, 0x75, 0x92, 0x28, 0xb7, 0xfa, 0x31, 0xd8, 0x31, 0xbd, 0xf0, 0xae, 0xbd, 0xae, 0x13, 0xd3,
0xcf, 0xb5, 0xf4, 0x43, 0x18, 0x84, 0x34, 0xa2, 0x92, 0x7a, 0x65, 0x74, 0x54, 0xe8, 0xfa, 0x9a, 0x0b, 0x2d, 0x7d, 0x1f, 0xfa, 0x21, 0x8d, 0xa8, 0xa4, 0x5e, 0x19, 0x1d, 0x15, 0xba, 0x9e, 0x26,
0xb8, 0xa7, 0xc3, 0xf1, 0x31, 0x7c, 0xa0, 0x54, 0xa6, 0x3e, 0xa7, 0xb1, 0xf4, 0x52, 0x5f, 0x4e, 0x1e, 0xea, 0x70, 0x7c, 0x0c, 0xef, 0x29, 0x95, 0xa9, 0xcf, 0x69, 0x2c, 0xbd, 0xd4, 0x97, 0x53,
0x31, 0x26, 0xb6, 0x3b, 0x88, 0xe9, 0xf9, 0x5b, 0xa4, 0xbe, 0xf5, 0xe5, 0xd4, 0xf9, 0x5b, 0x03, 0x8c, 0x89, 0xed, 0xf6, 0x63, 0x7a, 0xf1, 0x06, 0xa9, 0x6f, 0x7c, 0x39, 0x75, 0xfe, 0x56, 0x03,
0xec, 0x32, 0x98, 0xe4, 0x43, 0xe8, 0xa8, 0x6b, 0x3d, 0x16, 0xe6, 0x9e, 0x68, 0xab, 0xed, 0xab, 0xbb, 0x0c, 0x26, 0xf9, 0x00, 0xda, 0xea, 0x5a, 0x8f, 0x85, 0xb9, 0x27, 0x5a, 0x6a, 0xfb, 0x32,
0x50, 0x55, 0x45, 0x72, 0x72, 0x22, 0xa8, 0x44, 0xf3, 0x9a, 0x6e, 0xbe, 0x53, 0x99, 0x25, 0xd8, 0x54, 0x55, 0x91, 0x9c, 0x9e, 0x0a, 0x2a, 0xd1, 0xbc, 0xba, 0x9b, 0xef, 0x54, 0x66, 0x09, 0xf6,
0x37, 0xba, 0x10, 0x56, 0x5c, 0x5c, 0x2b, 0x8f, 0xcf, 0x24, 0x9b, 0x51, 0xbc, 0xb0, 0xe9, 0xea, 0xb5, 0x2e, 0x84, 0x86, 0x8b, 0x6b, 0xe5, 0xf1, 0x99, 0x64, 0x33, 0x8a, 0x17, 0xd6, 0x5d, 0xbd,
0x0d, 0x19, 0x42, 0x8b, 0x7a, 0xd2, 0x9f, 0x60, 0x86, 0xdb, 0xee, 0x0a, 0x7d, 0xe7, 0x4f, 0xc8, 0x21, 0x03, 0x68, 0x52, 0x4f, 0xfa, 0x13, 0xcc, 0x70, 0xdb, 0x6d, 0xd0, 0xb7, 0xfe, 0x84, 0x7c,
0x0f, 0xe0, 0xb6, 0x48, 0x32, 0x1e, 0x50, 0xaf, 0xb8, 0xb6, 0x8d, 0xdc, 0xbe, 0xa6, 0x1e, 0xe8, 0x0f, 0x6e, 0x8b, 0x24, 0xe3, 0x01, 0xf5, 0x8a, 0x6b, 0x5b, 0xc8, 0xed, 0x69, 0xea, 0x0b, 0x7d,
0xcb, 0x1d, 0x68, 0x9e, 0xb0, 0x70, 0xd4, 0x41, 0xc7, 0xac, 0x56, 0x93, 0xf0, 0x55, 0xe8, 0x2a, 0xb9, 0x03, 0xf5, 0x53, 0x16, 0x0e, 0xdb, 0xe8, 0x98, 0x8d, 0x6a, 0x12, 0xbe, 0x0c, 0x5d, 0xc5,
0x26, 0xf9, 0x31, 0x40, 0xa9, 0x29, 0x1c, 0x75, 0xaf, 0x10, 0xb5, 0x0b, 0xbd, 0x21, 0xd9, 0x02, 0x24, 0x3f, 0x04, 0x28, 0x35, 0x85, 0xc3, 0xce, 0x1a, 0x51, 0xbb, 0xd0, 0x1b, 0x92, 0x5d, 0x80,
0x08, 0x58, 0x3a, 0xa5, 0xdc, 0x53, 0x09, 0x63, 0x63, 0x72, 0xd8, 0x9a, 0xf2, 0x25, 0xbd, 0x54, 0x80, 0xa5, 0x53, 0xca, 0x3d, 0x95, 0x30, 0x36, 0x26, 0x87, 0xad, 0x29, 0x5f, 0xd2, 0x2b, 0xc5,
0x6c, 0x26, 0xbc, 0xc9, 0x37, 0x2c, 0x4d, 0x69, 0x38, 0x02, 0xf4, 0xb0, 0xcd, 0xc4, 0x17, 0x9a, 0x66, 0xc2, 0x9b, 0x7c, 0xcd, 0xd2, 0x94, 0x86, 0x43, 0x40, 0x0f, 0xdb, 0x4c, 0x7c, 0xa1, 0x09,
0xe0, 0x7c, 0x0d, 0xed, 0xdc, 0xb8, 0x7b, 0x60, 0x9f, 0x25, 0x51, 0x36, 0x2b, 0x9d, 0x36, 0x70, 0xce, 0xaf, 0xa0, 0x95, 0x1b, 0x77, 0x17, 0xec, 0xf3, 0x24, 0xca, 0x66, 0xa5, 0xd3, 0xfa, 0x6e,
0xbb, 0x9a, 0xf0, 0x2a, 0x24, 0x77, 0x01, 0x51, 0x12, 0xaf, 0x68, 0xa0, 0x8b, 0xd0, 0xbf, 0xea, 0x47, 0x13, 0x5e, 0x86, 0x64, 0x1b, 0x10, 0x25, 0xf1, 0x8a, 0x1a, 0xba, 0x08, 0xfd, 0xab, 0x2e,
0x82, 0x3b, 0xd0, 0x0e, 0x92, 0xe4, 0x94, 0x69, 0xdf, 0x75, 0xdc, 0x7c, 0xe7, 0xfc, 0xb1, 0x09, 0x78, 0x1f, 0x5a, 0x41, 0x92, 0x9c, 0x31, 0xed, 0xbb, 0xb6, 0x9b, 0xef, 0x9c, 0x3f, 0xd6, 0xe1,
0xb7, 0xab, 0xc5, 0xa2, 0xae, 0x40, 0x2d, 0xe8, 0x69, 0x0b, 0xd5, 0xa0, 0xda, 0xa3, 0x8a, 0xb7, 0x76, 0xb5, 0x58, 0xd4, 0x15, 0xa8, 0x05, 0x3d, 0x6d, 0xa1, 0x1a, 0x54, 0x7b, 0x52, 0xf1, 0x76,
0x1b, 0xa6, 0xb7, 0x8b, 0x23, 0xb3, 0x24, 0xd4, 0x17, 0x0c, 0xf4, 0x91, 0x37, 0x49, 0x48, 0x55, 0xcd, 0xf4, 0x76, 0x71, 0x64, 0x96, 0x84, 0xfa, 0x82, 0xbe, 0x3e, 0xf2, 0x3a, 0x09, 0xa9, 0xca,
0xae, 0x67, 0x2c, 0xc4, 0xf0, 0x0c, 0x5c, 0xb5, 0x54, 0x94, 0x09, 0x0b, 0x73, 0xf0, 0x51, 0x4b, 0xf5, 0x8c, 0x85, 0x18, 0x9e, 0xbe, 0xab, 0x96, 0x8a, 0x32, 0x61, 0x61, 0x0e, 0x3e, 0x6a, 0x89,
0x34, 0x8f, 0xa3, 0xde, 0xb6, 0x0e, 0xb8, 0xde, 0xa9, 0x80, 0xcf, 0x14, 0xb5, 0xa3, 0xa3, 0xa8, 0xe6, 0x71, 0xd4, 0xdb, 0xd2, 0x01, 0xd7, 0x3b, 0x15, 0xf0, 0x99, 0xa2, 0xb6, 0x75, 0x14, 0xd5,
0xd6, 0x64, 0x1b, 0x7a, 0x9c, 0xa6, 0x51, 0x9e, 0xfb, 0xe8, 0x7c, 0xdb, 0x35, 0x49, 0xe4, 0x3e, 0x9a, 0xec, 0x41, 0x97, 0xd3, 0x34, 0xca, 0x73, 0x1f, 0x9d, 0x6f, 0xbb, 0x26, 0x89, 0xdc, 0x03,
0x40, 0x90, 0x44, 0x11, 0x0d, 0x50, 0xc0, 0x46, 0x01, 0x83, 0xa2, 0xf2, 0x4e, 0xca, 0xc8, 0x13, 0x08, 0x92, 0x28, 0xa2, 0x01, 0x0a, 0xd8, 0x28, 0x60, 0x50, 0x54, 0xde, 0x49, 0x19, 0x79, 0x82,
0x34, 0x40, 0x57, 0xb7, 0xdc, 0xb6, 0x94, 0xd1, 0x11, 0x0d, 0xd4, 0x3b, 0x32, 0x41, 0xb9, 0x87, 0x06, 0xe8, 0xea, 0xa6, 0xdb, 0x92, 0x32, 0x3a, 0xa1, 0x81, 0x7a, 0x47, 0x26, 0x28, 0xf7, 0x10,
0xf0, 0xd5, 0xc3, 0x73, 0x5d, 0x45, 0x40, 0x90, 0xdd, 0x02, 0x98, 0xf0, 0x24, 0x4b, 0x35, 0xb7, 0xbe, 0xba, 0x78, 0xae, 0xa3, 0x08, 0x08, 0xb2, 0xbb, 0x00, 0x13, 0x9e, 0x64, 0xa9, 0xe6, 0xf6,
0xbf, 0xdd, 0x54, 0x48, 0x8e, 0x14, 0x64, 0x3f, 0x82, 0xdb, 0xe2, 0x72, 0x16, 0xb1, 0xf8, 0xd4, 0xf6, 0xea, 0x0a, 0xc9, 0x91, 0x82, 0xec, 0x07, 0x70, 0x5b, 0x5c, 0xcd, 0x22, 0x16, 0x9f, 0x79,
0x93, 0x3e, 0x9f, 0x50, 0x39, 0x1a, 0xe8, 0x0a, 0xc8, 0xa9, 0xef, 0x90, 0xa8, 0xde, 0x3e, 0x0b, 0xd2, 0xe7, 0x13, 0x2a, 0x87, 0x7d, 0x5d, 0x01, 0x39, 0xf5, 0x2d, 0x12, 0xd5, 0xdb, 0x67, 0xe1,
0x7f, 0x3a, 0xba, 0x8d, 0x19, 0xa0, 0x96, 0x4e, 0x0a, 0x64, 0x8f, 0x53, 0x5f, 0xd2, 0xef, 0xd0, 0x8f, 0x87, 0xb7, 0x31, 0x03, 0xd4, 0xd2, 0x49, 0x81, 0x1c, 0x72, 0xea, 0x4b, 0xfa, 0x2d, 0xda,
0xc6, 0xbe, 0x1d, 0x5a, 0x90, 0x0d, 0x68, 0x27, 0x1e, 0xbd, 0x08, 0xa2, 0xbc, 0x68, 0x5b, 0xc9, 0xd8, 0x37, 0x43, 0x0b, 0x72, 0x07, 0x5a, 0x89, 0x47, 0x2f, 0x83, 0x28, 0x2f, 0xda, 0x66, 0x72,
0xfe, 0x45, 0x10, 0x39, 0x4f, 0x60, 0x58, 0xb9, 0x31, 0x07, 0xfa, 0x75, 0x68, 0x51, 0xce, 0x93, 0x74, 0x19, 0x44, 0xce, 0x23, 0x18, 0x54, 0x6e, 0xcc, 0x81, 0x7e, 0x0b, 0x9a, 0x94, 0xf3, 0xa4,
0x02, 0x96, 0xf4, 0xc6, 0xf9, 0x0d, 0x90, 0xf7, 0x69, 0xf8, 0x7d, 0x98, 0xe7, 0x6c, 0xc0, 0xb0, 0x80, 0x25, 0xbd, 0x71, 0x7e, 0x0d, 0xe4, 0x5d, 0x1a, 0x7e, 0x17, 0xe6, 0x39, 0x77, 0x60, 0x50,
0xa2, 0x5a, 0xdb, 0xe1, 0xfc, 0xcb, 0x02, 0xf2, 0x12, 0xd1, 0xe5, 0xff, 0x6b, 0xec, 0xaa, 0xde, 0x51, 0xad, 0xed, 0x70, 0xfe, 0x65, 0x01, 0x79, 0x8e, 0xe8, 0xf2, 0xff, 0x35, 0x76, 0x55, 0xef,
0x55, 0xd3, 0xd1, 0xe8, 0x15, 0xfa, 0xd2, 0xcf, 0x5b, 0x62, 0x9f, 0x09, 0xad, 0xff, 0xa5, 0x2f, 0xaa, 0xe9, 0x68, 0xf4, 0x0a, 0x7d, 0xe9, 0xe7, 0x2d, 0xb1, 0xc7, 0x84, 0xd6, 0xff, 0xdc, 0x97,
0xfd, 0xbc, 0x35, 0x71, 0x1a, 0x64, 0x5c, 0x75, 0x49, 0x4c, 0x4b, 0x6c, 0x4d, 0x6e, 0x41, 0x22, 0x7e, 0xde, 0x9a, 0x38, 0x0d, 0x32, 0xae, 0xba, 0x24, 0xa6, 0x25, 0xb6, 0x26, 0xb7, 0x20, 0x91,
0x9f, 0xc0, 0x1d, 0x36, 0x89, 0x13, 0x4e, 0xe7, 0x62, 0x9e, 0x76, 0x55, 0x1b, 0x85, 0xd7, 0x35, 0x4f, 0xe0, 0x7d, 0x36, 0x89, 0x13, 0x4e, 0xe7, 0x62, 0x9e, 0x76, 0x55, 0x0b, 0x85, 0xb7, 0x34,
0xb7, 0x3c, 0xb0, 0x8f, 0x9e, 0x7b, 0x02, 0xc3, 0xca, 0x33, 0xae, 0x75, 0xf3, 0x9f, 0x2d, 0x18, 0xb7, 0x3c, 0x70, 0x84, 0x9e, 0x7b, 0x04, 0x83, 0xca, 0x33, 0xae, 0x75, 0xf3, 0x9f, 0x2d, 0x18,
0x3d, 0x97, 0xc9, 0x8c, 0x05, 0x2e, 0x55, 0xc6, 0x57, 0x9e, 0xfe, 0x10, 0x06, 0x0a, 0xdf, 0x17, 0x3e, 0x95, 0xc9, 0x8c, 0x05, 0x2e, 0x55, 0xc6, 0x57, 0x9e, 0x7e, 0x1f, 0xfa, 0x0a, 0xdf, 0x17,
0x9f, 0xdf, 0x4f, 0xa2, 0x70, 0xde, 0x3f, 0xef, 0x82, 0x82, 0x78, 0xcf, 0xf0, 0x42, 0x27, 0x89, 0x9f, 0xdf, 0x4b, 0xa2, 0x70, 0xde, 0x3f, 0xb7, 0x41, 0x41, 0xbc, 0x67, 0x78, 0xa1, 0x9d, 0x44,
0x42, 0xcc, 0xcd, 0x87, 0xa0, 0x70, 0xd8, 0x38, 0xaf, 0x27, 0x89, 0x7e, 0x4c, 0xcf, 0x2b, 0xe7, 0x21, 0xe6, 0xe6, 0x7d, 0x50, 0x38, 0x6c, 0x9c, 0xd7, 0x93, 0x44, 0x2f, 0xa6, 0x17, 0x95, 0xf3,
0x95, 0x10, 0x9e, 0xd7, 0xe0, 0xdd, 0x89, 0xe9, 0xb9, 0x3a, 0xef, 0xdc, 0x83, 0xbb, 0x4b, 0x6c, 0x4a, 0x08, 0xcf, 0x6b, 0xf0, 0x6e, 0xc7, 0xf4, 0x42, 0x9d, 0x77, 0xee, 0xc2, 0xf6, 0x0a, 0xdb,
0xcb, 0xc3, 0xf5, 0x6f, 0x0b, 0x86, 0xcf, 0x85, 0x60, 0x93, 0xf8, 0xd7, 0x08, 0x44, 0x85, 0xd1, 0xf2, 0x70, 0xfd, 0xdb, 0x82, 0xc1, 0x53, 0x21, 0xd8, 0x24, 0xfe, 0x25, 0x02, 0x51, 0x61, 0xf4,
0xeb, 0xd0, 0x0a, 0x92, 0x2c, 0x96, 0x68, 0x6c, 0xcb, 0xd5, 0x9b, 0x85, 0xda, 0x6c, 0xd4, 0x6a, 0x16, 0x34, 0x83, 0x24, 0x8b, 0x25, 0x1a, 0xdb, 0x74, 0xf5, 0x66, 0xa1, 0x36, 0x6b, 0x4b, 0xb5,
0x73, 0xa1, 0xba, 0x9b, 0xf5, 0xea, 0x36, 0xaa, 0x77, 0xa5, 0x52, 0xbd, 0x0f, 0xa0, 0xa7, 0x82, 0xb9, 0x50, 0xdd, 0xf5, 0xe5, 0xea, 0x36, 0xaa, 0xb7, 0x51, 0xa9, 0xde, 0x0f, 0xa1, 0xab, 0x82,
0xec, 0x05, 0x34, 0x96, 0x94, 0xe7, 0xc8, 0x0f, 0x8a, 0xb4, 0x87, 0x14, 0x25, 0x60, 0x76, 0x28, 0xec, 0x05, 0x34, 0x96, 0x94, 0xe7, 0xc8, 0x0f, 0x8a, 0x74, 0x88, 0x14, 0x25, 0x60, 0x76, 0x28,
0x0d, 0xfe, 0x90, 0xce, 0xdb, 0xd3, 0x7f, 0x2d, 0x58, 0xaf, 0x3e, 0x25, 0x8f, 0xd9, 0x95, 0x9d, 0x0d, 0xfe, 0x90, 0xce, 0xdb, 0xd3, 0x7f, 0x2d, 0xd8, 0xaa, 0x3e, 0x25, 0x8f, 0xd9, 0xda, 0x4e,
0x4a, 0x81, 0x1b, 0x8f, 0xf2, 0x77, 0xa8, 0xa5, 0x82, 0x89, 0x34, 0x3b, 0x8e, 0x58, 0xe0, 0x29, 0xa5, 0xc0, 0x8d, 0x47, 0xf9, 0x3b, 0xd4, 0x52, 0xc1, 0x44, 0x9a, 0x8d, 0x23, 0x16, 0x78, 0x8a,
0x86, 0xb6, 0xdf, 0xd6, 0x94, 0xf7, 0x3c, 0x9a, 0x7b, 0x65, 0xc5, 0xf4, 0x0a, 0x81, 0x15, 0x3f, 0xa1, 0xed, 0xb7, 0x35, 0xe5, 0x1d, 0x8f, 0xe6, 0x5e, 0x69, 0x98, 0x5e, 0x21, 0xd0, 0xf0, 0x33,
0x93, 0xd3, 0xa2, 0x5b, 0xa9, 0xf5, 0x82, 0xa7, 0xda, 0x37, 0x79, 0xaa, 0x53, 0xf7, 0x54, 0x99, 0x39, 0x2d, 0xba, 0x95, 0x5a, 0x2f, 0x78, 0xaa, 0x75, 0x93, 0xa7, 0xda, 0xcb, 0x9e, 0x2a, 0x33,
0x69, 0x5d, 0x33, 0xd3, 0x3e, 0x81, 0xa1, 0x1e, 0x77, 0xab, 0xe1, 0xda, 0x02, 0x28, 0x3b, 0x8b, 0xad, 0x63, 0x66, 0xda, 0x27, 0x30, 0xd0, 0xe3, 0x6e, 0x35, 0x5c, 0xbb, 0x00, 0x65, 0x67, 0x11,
0x18, 0x59, 0x1a, 0xde, 0x8a, 0xd6, 0x22, 0x9c, 0x5f, 0x80, 0xfd, 0x3a, 0xd1, 0x7a, 0x05, 0x79, 0x43, 0x4b, 0xc3, 0x5b, 0xd1, 0x5a, 0x84, 0xf3, 0x33, 0xb0, 0x5f, 0x25, 0x5a, 0xaf, 0x20, 0x4f,
0x06, 0x76, 0x54, 0x6c, 0x50, 0xb4, 0xb7, 0x4b, 0xe6, 0x35, 0x5e, 0xc8, 0xb9, 0x73, 0x21, 0xe7, 0xc0, 0x8e, 0x8a, 0x0d, 0x8a, 0x76, 0x0f, 0xc8, 0xbc, 0xc6, 0x0b, 0x39, 0x77, 0x2e, 0xe4, 0x7c,
0x73, 0xe8, 0x16, 0xe4, 0xc2, 0x67, 0xd6, 0x55, 0x3e, 0x6b, 0x2c, 0xf8, 0xcc, 0xf9, 0xa7, 0x05, 0x0e, 0x9d, 0x82, 0x5c, 0xf8, 0xcc, 0x5a, 0xe7, 0xb3, 0xda, 0x82, 0xcf, 0x9c, 0x7f, 0x5a, 0xb0,
0xeb, 0x55, 0x93, 0xf3, 0xb0, 0xbc, 0x87, 0x41, 0x79, 0x85, 0x37, 0xf3, 0xd3, 0xdc, 0x96, 0x67, 0x55, 0x35, 0x39, 0x0f, 0xcb, 0x3b, 0xe8, 0x97, 0x57, 0x78, 0x33, 0x3f, 0xcd, 0x6d, 0x79, 0x62,
0xa6, 0x2d, 0xf5, 0x63, 0xa5, 0x81, 0xe2, 0x8d, 0x9f, 0xea, 0x5c, 0xee, 0x47, 0x06, 0x69, 0xfc, 0xda, 0xb2, 0x7c, 0xac, 0x34, 0x50, 0xbc, 0xf6, 0x53, 0x9d, 0xcb, 0xbd, 0xc8, 0x20, 0x8d, 0xde,
0x0e, 0xd6, 0x6a, 0x22, 0x4b, 0x66, 0xbd, 0x1f, 0x99, 0xb3, 0x5e, 0x65, 0x5e, 0x2d, 0x4f, 0x9b, 0xc2, 0xe6, 0x92, 0xc8, 0x8a, 0x59, 0xef, 0x07, 0xe6, 0xac, 0x57, 0x99, 0x57, 0xcb, 0xd3, 0xe6,
0x03, 0xe0, 0x67, 0xf0, 0xa1, 0x86, 0x83, 0xbd, 0x32, 0x86, 0x85, 0xef, 0xab, 0xa1, 0xb6, 0x16, 0x00, 0xf8, 0x19, 0x7c, 0xa0, 0xe1, 0xe0, 0xb0, 0x8c, 0x61, 0xe1, 0xfb, 0x6a, 0xa8, 0xad, 0xc5,
0x43, 0xed, 0x8c, 0x61, 0x54, 0x3f, 0x9a, 0x97, 0xdf, 0x04, 0xd6, 0x8e, 0xa4, 0x2f, 0x99, 0x90, 0x50, 0x3b, 0x23, 0x18, 0x2e, 0x1f, 0xcd, 0xcb, 0x6f, 0x02, 0x9b, 0x27, 0xd2, 0x97, 0x4c, 0x48,
0x2c, 0x28, 0x3f, 0x3a, 0x16, 0x72, 0xc3, 0xba, 0xa9, 0x47, 0xd6, 0xeb, 0x70, 0x15, 0x9a, 0x52, 0x16, 0x94, 0x1f, 0x1d, 0x0b, 0xb9, 0x61, 0xdd, 0xd4, 0x23, 0x97, 0xeb, 0x70, 0x03, 0xea, 0x52,
0x16, 0xf9, 0xab, 0x96, 0x2a, 0x0a, 0xc4, 0xbc, 0x29, 0x8f, 0xc1, 0xf7, 0x70, 0x95, 0xca, 0x07, 0x16, 0xf9, 0xab, 0x96, 0x2a, 0x0a, 0xc4, 0xbc, 0x29, 0x8f, 0xc1, 0x77, 0x70, 0x95, 0xca, 0x07,
0x99, 0x48, 0x3f, 0xd2, 0x33, 0xc8, 0x0a, 0xce, 0x20, 0x36, 0x52, 0x70, 0x08, 0xd1, 0x6d, 0x3a, 0x99, 0x48, 0x3f, 0xd2, 0x33, 0x48, 0x03, 0x67, 0x10, 0x1b, 0x29, 0x38, 0x84, 0xe8, 0x36, 0x1d,
0xd4, 0xdc, 0x96, 0x9e, 0x50, 0x14, 0x01, 0x99, 0x5b, 0x00, 0x58, 0xaa, 0xba, 0xca, 0xda, 0xfa, 0x6a, 0x6e, 0x53, 0x4f, 0x28, 0x8a, 0x80, 0xcc, 0x5d, 0x00, 0x2c, 0x55, 0x5d, 0x65, 0x2d, 0x7d,
0xac, 0xa2, 0xec, 0x29, 0x82, 0x73, 0x1f, 0x36, 0xbf, 0xa0, 0x52, 0x4d, 0x53, 0x7c, 0x2f, 0x89, 0x56, 0x51, 0x0e, 0x15, 0xc1, 0xb9, 0x07, 0x3b, 0x5f, 0x50, 0xa9, 0xa6, 0x29, 0x7e, 0x98, 0xc4,
0x4f, 0xd8, 0x24, 0xe3, 0xbe, 0x11, 0x0a, 0xe7, 0x3f, 0x16, 0x6c, 0x5d, 0x21, 0x90, 0x3f, 0x78, 0xa7, 0x6c, 0x92, 0x71, 0xdf, 0x08, 0x85, 0xf3, 0x1f, 0x0b, 0x76, 0xd7, 0x08, 0xe4, 0x0f, 0x1e,
0x04, 0x9d, 0x99, 0x2f, 0x24, 0xe5, 0x45, 0x95, 0x14, 0xdb, 0x45, 0x57, 0x34, 0x6e, 0x72, 0x45, 0x42, 0x7b, 0xe6, 0x0b, 0x49, 0x79, 0x51, 0x25, 0xc5, 0x76, 0xd1, 0x15, 0xb5, 0x9b, 0x5c, 0x51,
0xb3, 0xe6, 0x8a, 0x0d, 0x68, 0xcf, 0xfc, 0x0b, 0x6f, 0x76, 0x9c, 0x8f, 0x4b, 0xad, 0x99, 0x7f, 0x5f, 0x72, 0xc5, 0x1d, 0x68, 0xcd, 0xfc, 0x4b, 0x6f, 0x36, 0xce, 0xc7, 0xa5, 0xe6, 0xcc, 0xbf,
0xf1, 0xe6, 0x18, 0x91, 0x8d, 0x71, 0xef, 0x38, 0x0b, 0x4e, 0xa9, 0x14, 0x25, 0xb2, 0x31, 0xfe, 0x7c, 0x3d, 0x46, 0x64, 0x63, 0xdc, 0x1b, 0x67, 0xc1, 0x19, 0x95, 0xa2, 0x44, 0x36, 0xc6, 0x9f,
0x42, 0x53, 0x70, 0x7e, 0xc2, 0x61, 0x12, 0x61, 0xa0, 0xeb, 0xe6, 0x3b, 0x27, 0x83, 0x3b, 0xea, 0x69, 0x0a, 0xce, 0x4f, 0x38, 0x4c, 0x22, 0x0c, 0x74, 0xdc, 0x7c, 0xe7, 0x5c, 0xc0, 0xf0, 0x24,
0x93, 0x8e, 0xc6, 0x07, 0x09, 0xc7, 0xcf, 0x86, 0x32, 0x43, 0x1e, 0x40, 0x2f, 0x88, 0x98, 0xc2, 0x1b, 0x8b, 0x80, 0xb3, 0x31, 0x7d, 0x4d, 0xa5, 0xaf, 0xc0, 0xb0, 0xc8, 0x91, 0x0f, 0xa1, 0x1b,
0x42, 0xe3, 0x5b, 0x0d, 0x34, 0x09, 0x7b, 0x06, 0x82, 0xa5, 0x9c, 0x7a, 0x95, 0xcf, 0x53, 0x50, 0x44, 0x4c, 0xa1, 0xa1, 0xf1, 0xb5, 0x06, 0x9a, 0x84, 0x5d, 0x03, 0xe1, 0x52, 0x4e, 0xbd, 0xca,
0xa4, 0xb7, 0xfa, 0x13, 0xf5, 0x2e, 0x74, 0x05, 0x8b, 0x03, 0xea, 0xc5, 0xfa, 0x9b, 0xa0, 0xe9, 0x07, 0x2a, 0x28, 0xd2, 0x1b, 0xfd, 0x91, 0xba, 0x0d, 0x1d, 0xc1, 0xe2, 0x80, 0x7a, 0xb1, 0xfe,
0x76, 0x70, 0x7f, 0x28, 0x9c, 0x3f, 0x59, 0xb0, 0x81, 0x1f, 0x3b, 0xb5, 0x2f, 0x95, 0xeb, 0x9b, 0x2a, 0xa8, 0xbb, 0x6d, 0xdc, 0x1f, 0x0b, 0xe7, 0x4f, 0x16, 0x6c, 0xaf, 0xb8, 0x39, 0x77, 0xe1,
0xf8, 0xaf, 0x80, 0xd0, 0x33, 0xb4, 0xc9, 0x38, 0x93, 0x97, 0xd7, 0x3d, 0x63, 0x88, 0x58, 0x54, 0xf5, 0xad, 0xfc, 0x17, 0x40, 0xe8, 0x39, 0xda, 0x65, 0x7c, 0xe3, 0xe4, 0x45, 0x76, 0xd7, 0x18,
0xeb, 0xae, 0xd1, 0x45, 0x92, 0xe3, 0x2b, 0xc4, 0x99, 0xe8, 0xda, 0x1d, 0x42, 0x4b, 0x0a, 0x0f, 0x25, 0x16, 0x3f, 0x83, 0xdc, 0x4d, 0xba, 0x48, 0x72, 0x7c, 0x85, 0x3b, 0x13, 0x5d, 0xc1, 0x03,
0xb1, 0x4a, 0xd9, 0xb9, 0x22, 0xc5, 0xa1, 0x20, 0x4f, 0x81, 0xa4, 0x3e, 0x97, 0x4c, 0x49, 0xab, 0x68, 0x4a, 0xe1, 0x21, 0x62, 0x29, 0x5b, 0x1b, 0x52, 0x1c, 0x0b, 0xf2, 0x18, 0x48, 0xea, 0x73,
0x91, 0xd9, 0x9b, 0xfa, 0x62, 0x8a, 0x97, 0xb5, 0xdc, 0xd5, 0x92, 0xf3, 0x25, 0xbd, 0xfc, 0xa5, 0xc9, 0x94, 0xb4, 0x1a, 0x9c, 0xbd, 0xa9, 0x2f, 0xa6, 0x78, 0x59, 0xd3, 0xdd, 0x28, 0x39, 0x5f,
0x2f, 0xa6, 0x0a, 0xa1, 0x71, 0x82, 0x68, 0xe2, 0xe0, 0x86, 0xeb, 0xdd, 0xbf, 0x76, 0xa1, 0x7f, 0xd2, 0xab, 0x9f, 0xfb, 0x62, 0xaa, 0x70, 0x1a, 0xe7, 0x88, 0x3a, 0x8e, 0x6f, 0xb8, 0x3e, 0xf8,
0x44, 0xfd, 0x73, 0x4a, 0x43, 0xcc, 0x17, 0x32, 0x29, 0x70, 0xaa, 0xfa, 0x27, 0x81, 0x3c, 0x5a, 0x6b, 0x07, 0x7a, 0x27, 0xd4, 0xbf, 0xa0, 0x34, 0xc4, 0xac, 0x21, 0x93, 0x02, 0xad, 0xaa, 0xff,
0x04, 0xa4, 0xa5, 0xbf, 0x2e, 0xc6, 0x1f, 0xdf, 0x24, 0x96, 0x97, 0xfc, 0x2d, 0x72, 0x08, 0x3d, 0x13, 0xc8, 0x83, 0x45, 0x58, 0x5a, 0xf9, 0x03, 0x63, 0xf4, 0xf1, 0x4d, 0x62, 0x79, 0xe1, 0xdf,
0xe3, 0x53, 0x9d, 0x6c, 0x1a, 0x07, 0x6b, 0x7f, 0x20, 0xc6, 0x5b, 0x57, 0x70, 0x0b, 0x6d, 0xcf, 0x22, 0xc7, 0xd0, 0x35, 0x3e, 0xd8, 0xc9, 0x8e, 0x71, 0x70, 0xe9, 0x3f, 0xc4, 0x68, 0x77, 0x0d,
0x2c, 0xf2, 0x1a, 0x7a, 0xc6, 0x44, 0x68, 0xea, 0xab, 0x8f, 0xa6, 0xa6, 0xbe, 0x25, 0x63, 0xa4, 0xb7, 0xd0, 0xf6, 0xc4, 0x22, 0xaf, 0xa0, 0x6b, 0xcc, 0x85, 0xa6, 0xbe, 0xe5, 0x01, 0xd5, 0xd4,
0x73, 0x4b, 0x69, 0x33, 0xe6, 0x3a, 0x53, 0x5b, 0x7d, 0x92, 0x34, 0xb5, 0x2d, 0x1b, 0x06, 0x51, 0xb7, 0x62, 0x98, 0x74, 0x6e, 0x29, 0x6d, 0xc6, 0x74, 0x67, 0x6a, 0x5b, 0x9e, 0x27, 0x4d, 0x6d,
0x9b, 0x31, 0x46, 0x99, 0xda, 0xea, 0x43, 0xa2, 0xa9, 0x6d, 0xc9, 0xec, 0xe5, 0xdc, 0x22, 0xbf, 0xab, 0x46, 0x42, 0xd4, 0x66, 0x0c, 0x53, 0xa6, 0xb6, 0xe5, 0x51, 0xd1, 0xd4, 0xb6, 0x62, 0x02,
0x83, 0xb5, 0xda, 0x28, 0x43, 0x9c, 0xf9, 0xa9, 0xab, 0x66, 0xb0, 0xf1, 0xc3, 0x6b, 0x65, 0x4a, 0x73, 0x6e, 0x91, 0xdf, 0xc2, 0xe6, 0xd2, 0x40, 0x43, 0x9c, 0xf9, 0xa9, 0x75, 0x93, 0xd8, 0xe8,
0xfd, 0x5f, 0x41, 0xdf, 0x9c, 0x20, 0x88, 0x61, 0xd0, 0x92, 0x21, 0x69, 0x7c, 0xff, 0x2a, 0xb6, 0xfe, 0xb5, 0x32, 0xa5, 0xfe, 0xaf, 0xa0, 0x67, 0xce, 0x11, 0xc4, 0x30, 0x68, 0xc5, 0xa8, 0x34,
0xa9, 0xd0, 0x6c, 0x62, 0xa6, 0xc2, 0x25, 0x6d, 0xdc, 0x54, 0xb8, 0xac, 0xf7, 0x39, 0xb7, 0xc8, 0xba, 0xb7, 0x8e, 0x6d, 0x2a, 0x34, 0x5b, 0x99, 0xa9, 0x70, 0x45, 0x33, 0x37, 0x15, 0xae, 0xea,
0x6f, 0x61, 0x75, 0xb1, 0x99, 0x90, 0x8f, 0x16, 0xdd, 0x56, 0xeb, 0x51, 0x63, 0xe7, 0x3a, 0x91, 0x80, 0xce, 0x2d, 0xf2, 0x1b, 0xd8, 0x58, 0x6c, 0x29, 0xe4, 0xa3, 0x45, 0xb7, 0x2d, 0x75, 0xaa,
0x52, 0xf9, 0x2b, 0x80, 0x79, 0x8f, 0x20, 0x46, 0xcd, 0xd6, 0x7a, 0xd4, 0x78, 0x73, 0x39, 0xb3, 0x91, 0x73, 0x9d, 0x48, 0xa9, 0xfc, 0x25, 0xc0, 0xbc, 0x53, 0x10, 0xa3, 0x66, 0x97, 0x3a, 0xd5,
0x54, 0xf5, 0x7b, 0xd8, 0x58, 0x0a, 0xc4, 0xc4, 0x28, 0x93, 0xeb, 0xa0, 0x7c, 0xfc, 0xc3, 0x1b, 0x68, 0x67, 0x35, 0xb3, 0x54, 0xf5, 0x7b, 0xb8, 0xb3, 0x12, 0x8e, 0x89, 0x51, 0x26, 0xd7, 0x01,
0xe5, 0xca, 0xbb, 0xbe, 0x86, 0x0f, 0x16, 0x70, 0x92, 0x6c, 0x57, 0xab, 0xa6, 0x0e, 0xa1, 0xe3, 0xfa, 0xe8, 0xfb, 0x37, 0xca, 0x95, 0x77, 0xfd, 0x0e, 0x36, 0x97, 0x30, 0xcb, 0xcc, 0x8a, 0x75,
0x07, 0xe6, 0xff, 0xa6, 0x25, 0x60, 0xa7, 0x2a, 0xeb, 0xc5, 0x7d, 0x58, 0x15, 0x1a, 0x22, 0x4e, 0x50, 0x6a, 0x66, 0xc5, 0x5a, 0xd0, 0x53, 0x15, 0xf6, 0xec, 0x1e, 0x6c, 0x08, 0x0d, 0x15, 0xa7,
0xc4, 0x8e, 0x86, 0xd7, 0x17, 0x80, 0xb6, 0xbc, 0xe5, 0x89, 0x4c, 0x8e, 0xdb, 0xf8, 0x7b, 0xf3, 0x62, 0x5f, 0x43, 0xed, 0x33, 0x40, 0x9b, 0xde, 0xf0, 0x44, 0x26, 0xe3, 0x16, 0xfe, 0xec, 0xfc,
0x27, 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, 0x0d, 0xae, 0xfb, 0x80, 0xed, 0x14, 0x00, 0x00, 0xd1, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x37, 0x58, 0xa5, 0x1f, 0xfb, 0x14, 0x00, 0x00,
} }

View file

@ -10,7 +10,7 @@ import (
"github.com/chrislusf/seaweedfs/weed/util" "github.com/chrislusf/seaweedfs/weed/util"
) )
func (fs *FilerServer) ListenForEvents(req *filer_pb.ListenForEventsRequest, stream filer_pb.SeaweedFiler_ListenForEventsServer) error { func (fs *FilerServer) SubscribeMetadata(req *filer_pb.SubscribeMetadataRequest, stream filer_pb.SeaweedFiler_SubscribeMetadataServer) error {
peerAddress := findClientAddress(stream.Context(), 0) peerAddress := findClientAddress(stream.Context(), 0)
@ -46,7 +46,7 @@ func (fs *FilerServer) ListenForEvents(req *filer_pb.ListenForEventsRequest, str
return nil return nil
} }
message := &filer_pb.FullEventNotification{ message := &filer_pb.SubscribeMetadataResponse{
Directory: dirPath, Directory: dirPath,
EventNotification: eventNotification, EventNotification: eventNotification,
} }

View file

@ -117,7 +117,7 @@ func (fs *FilerServer) moveSelfEntry(ctx context.Context, oldParent util.FullPat
events.newEntries = append(events.newEntries, newEntry) events.newEntries = append(events.newEntries, newEntry)
if moveFolderSubEntries!=nil { if moveFolderSubEntries != nil {
if moveChildrenErr := moveFolderSubEntries(); moveChildrenErr != nil { if moveChildrenErr := moveFolderSubEntries(); moveChildrenErr != nil {
return moveChildrenErr return moveChildrenErr
} }

View file

@ -167,10 +167,10 @@ func setEtag(w http.ResponseWriter, etag string) {
} }
} }
func getEtag(resp *http.Response) (etag string){ func getEtag(resp *http.Response) (etag string) {
etag = resp.Header.Get("ETag") etag = resp.Header.Get("ETag")
if strings.HasPrefix(etag, "\"") && strings.HasSuffix(etag, "\""){ if strings.HasPrefix(etag, "\"") && strings.HasSuffix(etag, "\"") {
return etag[1:len(etag)-1] return etag[1 : len(etag)-1]
} }
return return
} }

View file

@ -6,7 +6,7 @@ import (
) )
var ( var (
// _ backend.BackendStorageFile = &MemoryMappedFile{} // remove this to break import cycle // _ backend.BackendStorageFile = &MemoryMappedFile{} // remove this to break import cycle
) )
type MemoryMappedFile struct { type MemoryMappedFile struct {

View file

@ -21,11 +21,11 @@ func TestOnDisk(t *testing.T) {
writeCount := 5 writeCount := 5
type test_data struct { type test_data struct {
data []byte data []byte
fileId string fileId string
} }
testData := make([]*test_data, writeCount) testData := make([]*test_data, writeCount)
for i:=0;i<writeCount;i++{ for i := 0; i < writeCount; i++ {
buff := make([]byte, 1024*1024) buff := make([]byte, 1024*1024)
rand.Read(buff) rand.Read(buff)
testData[i] = &test_data{ testData[i] = &test_data{
@ -35,7 +35,7 @@ func TestOnDisk(t *testing.T) {
cache.SetChunk(testData[i].fileId, testData[i].data) cache.SetChunk(testData[i].fileId, testData[i].data)
} }
for i:=0;i<writeCount;i++{ for i := 0; i < writeCount; i++ {
data := cache.GetChunk(testData[i].fileId) data := cache.GetChunk(testData[i].fileId)
if bytes.Compare(data, testData[i].data) != 0 { if bytes.Compare(data, testData[i].data) != 0 {
t.Errorf("failed to write to and read from cache: %d", i) t.Errorf("failed to write to and read from cache: %d", i)
@ -46,7 +46,7 @@ func TestOnDisk(t *testing.T) {
cache = NewChunkCache(0, tmpDir, totalDiskSizeMb, segmentCount) cache = NewChunkCache(0, tmpDir, totalDiskSizeMb, segmentCount)
for i:=0;i<writeCount;i++{ for i := 0; i < writeCount; i++ {
data := cache.GetChunk(testData[i].fileId) data := cache.GetChunk(testData[i].fileId)
if bytes.Compare(data, testData[i].data) != 0 { if bytes.Compare(data, testData[i].data) != 0 {
t.Errorf("failed to write to and read from cache: %d", i) t.Errorf("failed to write to and read from cache: %d", i)

View file

@ -163,7 +163,7 @@ func (m *LogBuffer) ReadFromBuffer(lastReadTime time.Time) (ts time.Time, buffer
/* /*
for i, pos := range m.idx { for i, pos := range m.idx {
logEntry, ts := readTs(m.buf, pos) logEntry, ts := readTs(m.buf, pos)
event := &filer_pb.FullEventNotification{} event := &filer_pb.SubscribeMetadataResponse{}
proto.Unmarshal(logEntry.Data, event) proto.Unmarshal(logEntry.Data, event)
entry := event.EventNotification.OldEntry entry := event.EventNotification.OldEntry
if entry == nil { if entry == nil {