Documentation ¶
Overview ¶
Package memory
Português:
Este projeto arquiva dados para serem usados na forma de uma memória cache simples, ou com sincronismo entre os pods contendo o mesmo projeto. O código foi feito para ser genérico, ou seja, arquiva e recupera structs contendo dados (a versão atual não trabalha com mapas) e é de fácil configuração. O formato dos dados usados arquivados em cache são, na versão atual, chave/valor, onde a chave não deve ser do tipo inteiro, e o valor é uma interface{}, não podendo ser um mapa.
Explicação das limitações:
Os dados são convertidos em json para o sincronismo entre pods, por uma questão de desempenho, onde o json teve o menor tempo de conversão entre os formatos testados. Porém, o algoritmo de conversão de json e o processamento da memória internar pelo golang têm algumas limitações: * Números são convertidos como sendo ponto flutuante de 64 bits na hora de serem transferidos entre os pods, por isto, uma chave do tipo inteiro não será encontrada no pod ouvinte, mas, uma chave em ponto flutuante funcionará. O motivo disto é o fato do pod ouvinte receber uma chave em formato de ponto flutuante, apos ser convertida em json para o envio, enquanto o pod emissor conterá uma chave em formato inteiro. * Struct dentro do tipo interface{} é tratado polo golang como sendo um map[string]interface{}, onde a chave recebe o valor contido na tag json e caso esta não esteja presente, será usado o nome do campo no struct, o que torna a conversão de struct complexos mais lenta.
Configuração de sincronismo:
fixme: fazer
Sincronismo dos dados entre pods:
O sincronismo é feito com uma relação de N para N entre os pods, onde o pod N1 envia todos os seus dados para todos os pods do projeto, enquanto o pod N2 faz o mesmo. Isto faz com que todos os dados sejam sincronizados entre todos os pods após algum tempo.
Colisão de sincronismo:
Definição: Imagine dois pods, A e B, onde os dois pods contêm a mesma chave, k, e esta chave foi apagada no pod A, mas, o sincronismo do pod B envia a chave k novamente para o pod A e ela retorna para onde foi apagada. Solução: O dado é gravado dentro de DataToMemory com dois indicadores: Event: (KCreated, KDeleted) para arquivar estado atual do dado KCreated: indica um dado criado ou atualizado KDeleted: indica um dado transformado em nil (apagado virtualmente) EventDate: Data do último evento (criado, atualizado ou apagado) Quando o dado é recebido durante o sincronismo, prevalece o dado mais novo, arquivado em EventData e quando o dado é apagado, o mesmo é transformado em nil, mas, a chave permanece na memória por um tempo e Event é definido como KDeleted.
Transmissão de dados:
+---------------+ +---------------+ | | | | | | >--------------> ENVIO DE CRC >----------------> | | | Pod A | | Pod B | | | <-----------< SOLICITAÇÃO DE DADO <------------< | | | Emissário | | Ouvinte | | | >---------> ENVIO DE DADO COMPLETO >-----------> | | | | | | +---------------+ +---------------+ Vejamos o exemplo abaixo com o dado: {"Id":"123.123.123","Person":{"Name":"Dino Sauro","Age":25},"Access":{"News":true}}, Onde a chave usada para guardar o dado é a string "123.123.123". Os pods envolvidos no exemplo são os pods denominados de emissário e ouvinte: ENVIO DE CRC: o pod emissário envia o CRC Explicação: { "k": chave do dado (n bytes) "c": CRC do dado (4 bytes) "w": unix time de quando o dado foi criado (8 bytes) "n": flag NotFound (1 byte) } Real: { "k":"123.123.123", "c":"vnlnEQ==", "w":1626738501479109761, "n":false } Ao ser recebido, a chave é procurada e caso não exista, ocorre uma solicitação de envio; Caso a chave exista, o CRC de ambos são comparados e caso sejam iguais, o processo é abortado e o evento anterior é ignorado; Caso a chave exista e haja diferença no CRC, o tempo unix é usado para escolher o mais novo e uma solicitação de envio é feita, caso necessário. SOLICITAÇÃO DE DADO: o pod ouvinte não contém o dado, ou o mesmo é mais antigo Explicação: { "k": chave do dado (n bytes) "n": flag NotFound (1 byte) } Real: { "k":"123.123.123", "n":true } ENVIO DE DADO COMPLETO: o pod emissário recebeu a solicitação Explicação: { "k": chave do dado (n bytes) "d": dado completo na forma de dataToMemory.DataToMemory "e": Evento, KCreated=1 ou KDeleted=2 "d": Data de criação do dado "v": Dado contido na memória "c": CRC do dado "n": flag NotFound (1 byte) } Real: { "k":"123.123.123", "d": { "e": 1, "d": "2021-07-20T00:21:27.271003791Z", "v": {"Id":"123.123.123","Person":{"Name":"Dino Sauro","Age":25},"Access":{"News":true}}, "c":"vnlnEQ==" }, "n":false } ENVIO DE CRC: Todos os dados recebem um ID para o ciclo de envio atual, impedindo que mudanças constantes nos dados mantenham um pod em laço infinito de sincronismo; Os dados são divididos em pequenos grupos e é enviado Chave, CRC e tempo unix de quando o dado foi criado; SOLICITAÇÃO DE DADO: Quando o pod ouvinte recebe o dado da fase ENVIO DE CRC, ele compara o CRC (4 bytes) do dado para saber se é o mesmo CRC, caso seja o mesmo, há uma possibilidade estatística muito grande do dado ser o mesmo e ele é ignorado; Caso o CRC seja outro, é comparada a data de criação do dado pelo tempo unix (8 bytes) e prevalece o dado mais novo. Em caso de haver necessidade de sincronismo, quando o dado do pod emissário é mais novo, é devolvida ao pod emissor a chave do dado e um booleano (1 byte) informando a necessidade de sincronismo. Caso contrário, a informação recebida é ignorada. ENVIO DE DADO COMPLETO: Quando o pod emissário recebe uma chave com o flag notFound do pod ouvinte, o dado correspondente a chave é enviado. Controle de envio: Sincronismo: No início do processo de sincronismo, o fluxo de atualização da memória é bloqueado e todos os dados recebem um ID de sincronismo, e apenas os dados que receberem este ID serão atualizados no ciclo de sincronismo atual, forçando dados atualizados durante o processo de sincronismo a serem atualizados no próximo cíclo. Nota: os dados não permanecem bloqueados durante o ciclo de sincronismo, apenas durante a marcação de ID do ciclo de sincronismo. Logo em seguida, o dado entra na fase ENVIO DE CRC, o mesmo recebe o IP do pod ouvinte para que seja marcado como sincronizado. Por isto, o mesmo dado é enviado apenas uma vez a cada pod do conjunto. Cancelamento de sincronismo: Sempre que um dado é atualizado, a lista é apagada e o dado é marcado como não sincronizado. O mesmo ocorre quando um pod perde comunicação, onde todos os dados com o IP do pod problemático são marcados como não sincronizados.
Index ¶
- Variables
- func RegisterSyncCacheDaraServerServer(s grpc.ServiceRegistrar, srv SyncCacheDaraServerServer)
- type Empty
- type IpGenerator
- type Memory
- func (e *Memory) Delete(key interface{})
- func (e *Memory) DeleteAll()
- func (e *Memory) Get(key, dataPointer interface{}) (found bool, err error)
- func (e *Memory) GetAll(dataPointer interface{}) (err error)
- func (e *Memory) GetCountListOfDataToPrepareAndSendCrcOnlyToRemotePod(ipAddress string) (total int)
- func (e *Memory) GetKeyAndPrepareToSendCrcOnlyToRemotePod(key interface{}) (found bool, data []byte, err error)
- func (e *Memory) GetKeyToSendCompleteData(dataReceivedAsByte []byte, ipAddressFromRemotePod string) (found bool, dataToSend []byte, err error)
- func (e *Memory) GetListAndPrepareToSendCrcOnlyToRemotePod(limit int, ipAddress string) (listOfData [][]byte, err error)
- func (e *Memory) GetThisNodeAddress() (IP string)
- func (e *Memory) GetTotal() (total int)
- func (e *Memory) GetTotalIsGreaterThanZero() (greaterThanZero bool)
- func (e Memory) GrpcFuncPodIsReady(context.Context, *Empty) (replay *PodIsReadyReplay, err error)
- func (e Memory) GrpcFuncSendCrcList(context context.Context, in *SendCrcListRequest) (replay *SendCrcListReplay, err error)
- func (e *Memory) InitMemory()
- func (e *Memory) InitServer(config ...*memberlist.Config) (err error)
- func (e *Memory) New(option ...interface{}) (Object interface{}, err error)
- func (e *Memory) ServicesDiscoverDefaultLocalConfig() *memberlist.Config
- func (e *Memory) Set(key, dataPointer interface{}) (err error)
- func (e *Memory) SetAll(dataPointer interface{}) (err error)
- func (e *Memory) SetMany(dataPointer interface{}) (err error)
- func (e *Memory) SyncIpAddressAdd(key interface{}, ipAddress string)
- func (e *Memory) SyncIpAddressRemove(key interface{}, ipAddress string)
- func (e *Memory) SyncIpAddressReset(key interface{})
- func (e *Memory) SyncIpAddressResetAndSet(key interface{}, ipAddress string)
- func (e *Memory) VerifySyncToMemory(data []byte, ipAddress string) (theDataMustBeSynchronized bool, dataToSync []byte, err error)
- type PodIsReadyReplay
- type SendCrcListReplay
- func (*SendCrcListReplay) Descriptor() ([]byte, []int)deprecated
- func (x *SendCrcListReplay) GetIpFromSender() string
- func (x *SendCrcListReplay) GetListOfDataToBeSentToRemotePod() [][]byte
- func (*SendCrcListReplay) ProtoMessage()
- func (x *SendCrcListReplay) ProtoReflect() protoreflect.Message
- func (x *SendCrcListReplay) Reset()
- func (x *SendCrcListReplay) String() string
- type SendCrcListRequest
- func (*SendCrcListRequest) Descriptor() ([]byte, []int)deprecated
- func (x *SendCrcListRequest) GetDataIntegrityChecker() [][]byte
- func (x *SendCrcListRequest) GetIpFromSender() string
- func (*SendCrcListRequest) ProtoMessage()
- func (x *SendCrcListRequest) ProtoReflect() protoreflect.Message
- func (x *SendCrcListRequest) Reset()
- func (x *SendCrcListRequest) String() string
- type SyncCacheDaraServerClient
- type SyncCacheDaraServerServer
- type UnimplementedSyncCacheDaraServerServer
- type UnsafeSyncCacheDaraServerServer
Examples ¶
Constants ¶
This section is empty.
Variables ¶
var File_typeGrpc_proto protoreflect.FileDescriptor
var SyncCacheDaraServer_ServiceDesc = grpc.ServiceDesc{ ServiceName: "cachethreadsafe.SyncCacheDaraServer", HandlerType: (*SyncCacheDaraServerServer)(nil), Methods: []grpc.MethodDesc{ { MethodName: "grpcFuncPodIsReady", Handler: _SyncCacheDaraServer_GrpcFuncPodIsReady_Handler, }, { MethodName: "grpcFuncSendCrcList", Handler: _SyncCacheDaraServer_GrpcFuncSendCrcList_Handler, }, }, Streams: []grpc.StreamDesc{}, Metadata: "typeGrpc.proto", }
SyncCacheDaraServer_ServiceDesc is the grpc.ServiceDesc for SyncCacheDaraServer service. It's only intended for direct use with grpc.RegisterService, and not to be introspected or modified (even as a copy)
Functions ¶
func RegisterSyncCacheDaraServerServer ¶ added in v0.5.177
func RegisterSyncCacheDaraServerServer(s grpc.ServiceRegistrar, srv SyncCacheDaraServerServer)
Types ¶
type Empty ¶ added in v0.5.177
type Empty struct {
// contains filtered or unexported fields
}
func (*Empty) Descriptor
deprecated
added in
v0.5.177
func (*Empty) ProtoMessage ¶ added in v0.5.177
func (*Empty) ProtoMessage()
func (*Empty) ProtoReflect ¶ added in v0.5.177
func (x *Empty) ProtoReflect() protoreflect.Message
type IpGenerator ¶ added in v0.5.177
type IpGenerator struct {
// contains filtered or unexported fields
}
func (*IpGenerator) GetIpList ¶ added in v0.5.177
func (e *IpGenerator) GetIpList() (ipList []string)
func (*IpGenerator) Init ¶ added in v0.5.177
func (e *IpGenerator) Init( gateway string, subnet string, ) ( err error, )
func (*IpGenerator) String ¶ added in v0.5.177
func (e *IpGenerator) String(ipA, ipB, ipC, ipD byte) (currentIP string)
type Memory ¶
type Memory struct { UnimplementedSyncCacheDaraServerServer // contains filtered or unexported fields }
func (*Memory) Delete ¶
func (e *Memory) Delete(key interface{})
Delete Português: Apaga a chave, caso exista
func (*Memory) Get ¶
Get Português: Retorna o valor contido em memória
Example ¶
type User struct { Name string } var err error var memory = Memory{} memory.Set("user", User{Name: "Dinossauro"}) var user = User{} _, err = memory.Get("user", &user) if err != nil { panic(err) } fmt.Printf("%+v\n", user) _, err = memory.Get("user_a", &user) if err != nil { panic(err) } fmt.Printf("%+v", user)
Output: {Name:Dinossauro} {Name:}
func (*Memory) GetAll ¶
GetAll Português: popula um mapa com o conteúdo da memória
Example ¶
type User struct { Name string } var err error var memory = Memory{} var list map[string]User memory.Set("fulano", User{Name: "Fulano da Silva Sauro"}) memory.Set("beltrano", User{Name: "Beltrano da Silva Sauro"}) err = memory.GetAll(&list) if err != nil { panic(err) } fmt.Printf("list: %+v", list)
Output: list: map[beltrano:{Name:Beltrano da Silva Sauro} fulano:{Name:Fulano da Silva Sauro}]
func (*Memory) GetCountListOfDataToPrepareAndSendCrcOnlyToRemotePod ¶ added in v0.5.117
func (*Memory) GetKeyAndPrepareToSendCrcOnlyToRemotePod ¶ added in v0.5.105
func (e *Memory) GetKeyAndPrepareToSendCrcOnlyToRemotePod(key interface{}) (found bool, data []byte, err error)
GetKeyAndPrepareToSendCrcOnlyToRemotePod (português): Prepara uma chave para ser enviada ao pod remoto na fase 1 descrita acima, em dataToSyncFormat
func (*Memory) GetKeyToSendCompleteData ¶ added in v0.5.244
func (e *Memory) GetKeyToSendCompleteData(dataReceivedAsByte []byte, ipAddressFromRemotePod string) (found bool, dataToSend []byte, err error)
GetKeyToSendCompleteData (português): Prepara uma chave para ser enviada ao pod remoto na fase 1 descrita acima, em dataReceived
func (*Memory) GetListAndPrepareToSendCrcOnlyToRemotePod ¶ added in v0.5.105
func (e *Memory) GetListAndPrepareToSendCrcOnlyToRemotePod(limit int, ipAddress string) (listOfData [][]byte, err error)
GetListAndPrepareToSendCrcOnlyToRemotePod (português): prepara dados para serem sincronizados na fase 1 descrita em dataToSyncFormat.
Entrada: limit: limite de dados a serem enviado por evento de sincronismo ipAddress: IP do pod remoto a ser sincronizado Saída: listOfData: array de bytes json já em formato de sincronismo entre pods err: objeto de erro padrão golang
func (*Memory) GetThisNodeAddress ¶ added in v0.5.203
func (*Memory) GetTotalIsGreaterThanZero ¶
GetTotalIsGreaterThanZero (Português) Retorna true caso haja pelo menos 1 dado arquivado no mapa.
Saída: greaterThanZero: true, caso haja pelo menos um dado arquivado no mapa
Exemplo:
type User struct { Name string } var err error var memory = Memory{} var userA = User{Name: "a"} var userB = User{} var greaterThanZero = memory.GetTotalIsGreaterThanZero() if greaterThanZero == true { fmt.Printf("error: total is greater than zero") return } memory.Set(1, userA) _, err = memory.Get(1, &userB) if err != nil { fmt.Printf("error: %v", err.Error()) } fmt.Printf("user: %+v", userB) greaterThanZero = memory.GetTotalIsGreaterThanZero() if greaterThanZero == false { fmt.Printf("error: total is less than zero") return }
output:
user: {Name:a}
Example ¶
type User struct { Name string } var err error var memory = Memory{} var userA = User{Name: "a"} var userB = User{} var greaterThanZero = memory.GetTotalIsGreaterThanZero() if greaterThanZero == true { fmt.Printf("error: total is greater than zero") return } memory.Set(1, userA) _, err = memory.Get(1, &userB) if err != nil { fmt.Printf("error: %v", err.Error()) } fmt.Printf("user: %+v", userB) greaterThanZero = memory.GetTotalIsGreaterThanZero() if greaterThanZero == false { fmt.Printf("error: total is less than zero") return }
Output: user: {Name:a}
func (Memory) GrpcFuncPodIsReady ¶ added in v0.5.177
GrpcFuncPodIsReady (português): Informa ao pod remoto que este pod ainda não está pronto para receber dados.
Esta função é chamada pelo pod remoto antes de cada envio de dados. Quando esta função retorna false, o pod remoto tenta envia dados para o próximo pod da lista.
Entrada: Saída: ready: true quando o framework membersList estiver pronto Nota: Função gRPC gerada por `rpc PodIsReady(PodIsReadyRequest) returns (PodIsReadyReplay) {}`; Esta função é de uso interno e está pública apenas por uma questão de compatibilidade com o gerador de código do framework gRPC; NÃO CHAME ESTA FUNÇÃO SE VOCÊ NÃO SABE O QUE ESTÁ FAZENDO.
func (Memory) GrpcFuncSendCrcList ¶ added in v0.5.177
func (e Memory) GrpcFuncSendCrcList(context context.Context, in *SendCrcListRequest) (replay *SendCrcListReplay, err error)
GrpcFuncSendCrcList (português): Faz o sincronismo de dados entre pods de acordo com o protocolo.
Nota: função gRPC gerada por `rpc SendCrcList(stream SendCrcListRequest) returns (stream SendCrcListReplay) {}` Esta função é de uso interno e está pública apenas por uma questão de compatibilidade com o gerador de código do framework gRPC; NÃO CHAME ESTA FUNÇÃO SE VOCÊ NÃO SABE O QUE ESTÁ FAZENDO.
func (*Memory) InitMemory ¶ added in v0.5.179
func (e *Memory) InitMemory()
InitMemory Português: Inicializa a memória
func (*Memory) InitServer ¶ added in v0.5.192
func (e *Memory) InitServer(config ...*memberlist.Config) (err error)
InitServer (português): Permite configurar o servidor de sincronismo.
Nota: Veja o framework https://github.com/hashicorp/memberlist para mais detalhes Use InitServerWithDefaultLocalConfig para configurar de forma automática
func (*Memory) ServicesDiscoverDefaultLocalConfig ¶ added in v0.5.179
func (e *Memory) ServicesDiscoverDefaultLocalConfig() *memberlist.Config
ServicesDiscoverDefaultLocalConfig
Português: carrega as configurações padrão do framework memberlist
func (*Memory) Set ¶
Set Português: filtra o ponteiro, se houver, e salva o dado em memória
Example ¶
type User struct { Name string } var err error var memory = Memory{} err = memory.Set("fulano", User{Name: "Fulano da Silva Sauro"}) if err != nil { log.Printf("set().error: %v", err) panic(err) } err = memory.Set("beltrano", &User{Name: "Beltrano da Silva Sauro"}) if err != nil { log.Printf("set().error: %v", err) panic(err) } var user = User{} _, err = memory.Get("beltrano", &user) if err != nil { log.Printf("get().error: %v", err) panic(err) } fmt.Printf("%+v", user)
Output: {Name:Beltrano da Silva Sauro}
func (*Memory) SetAll ¶
SetAll Português: Limpa a memória e adiciona o conteúdo de um mapa a memória
Example ¶
type User struct { Name string } var err error var memory = Memory{} var listA = map[string]User{ "fulano": {Name: "Fulano da Silva Sauro"}, "beltrano": {Name: "Beltrano da Silva Sauro"}, } err = memory.SetAll(&listA) if err != nil { panic(err) } var user User _, err = memory.Get("fulano", &user) if err != nil { panic(err) } fmt.Printf("user: %+v\n", user) var listB = map[string]*User{ "fulano": {Name: "Fulano da Silva Sauro"}, "beltrano": {Name: "Beltrano da Silva Sauro"}, } err = memory.SetAll(&listB) if err != nil { panic(err) } user = User{} _, err = memory.Get("beltrano", &user) if err != nil { panic(err) } fmt.Printf("user: %+v\n", user)
Output: user: {Name:Fulano da Silva Sauro} user: {Name:Beltrano da Silva Sauro}
func (*Memory) SetMany ¶
SetMany Português: Adiciona o conteúdo de um mapa a memória
Example ¶
type User struct { Name string } var err error var memory = Memory{} var listA = map[string]User{ "fulano": {Name: "Fulano da Silva Sauro"}, "beltrano": {Name: "Beltrano da Silva Sauro"}, } err = memory.SetMany(&listA) if err != nil { panic(err) } var user User _, err = memory.Get("fulano", &user) if err != nil { panic(err) } fmt.Printf("user: %+v\n", user) var listB = map[string]*User{ "fulano": {Name: "Fulano da Silva Sauro"}, "beltrano": {Name: "Beltrano da Silva Sauro"}, } err = memory.SetMany(&listB) if err != nil { panic(err) } user = User{} _, err = memory.Get("beltrano", &user) if err != nil { panic(err) } fmt.Printf("user: %+v\n", user)
Output: user: {Name:Fulano da Silva Sauro} user: {Name:Beltrano da Silva Sauro}
func (*Memory) SyncIpAddressAdd ¶ added in v0.5.105
SyncIpAddressAdd (português): adiciona um endereço de pod sincronizado a lista de sincronismo da chave dada.
func (*Memory) SyncIpAddressRemove ¶ added in v0.5.105
SyncIpAddressRemove (português): remove o endereço de pod sincronizado a lista de sincronismo da chave dada.
func (*Memory) SyncIpAddressReset ¶ added in v0.5.105
func (e *Memory) SyncIpAddressReset(key interface{})
SyncIpAddressReset (português): limpa a lista de sincronismo de todos os pods para a chave dada.
func (*Memory) SyncIpAddressResetAndSet ¶ added in v0.5.105
SyncIpAddressResetAndSet (português): arquiva o endereço IP do dado enviado para que o mesmo não seja sincronizado novamente
func (*Memory) VerifySyncToMemory ¶ added in v0.5.105
func (e *Memory) VerifySyncToMemory(data []byte, ipAddress string) (theDataMustBeSynchronized bool, dataToSync []byte, err error)
VerifySyncToMemory (português): Recebe o dado enviado pelo pod emissor, verifica o formato do dado recebido e informa a necessidade de sincronismo ou decide se adiciona o dado na memória.
Entrada: data: dado unitário recebido do pod emissor ipAddress: endereço do pod emissor Saída: theDataMustBeSynchronized: o dado recebido não existe na memória ou é mais antigo err: objeto de erro padrão do golang
type PodIsReadyReplay ¶ added in v0.5.177
type PodIsReadyReplay struct { Ready bool `protobuf:"varint,1,opt,name=Ready,proto3" json:"Ready,omitempty"` // contains filtered or unexported fields }
func (*PodIsReadyReplay) Descriptor
deprecated
added in
v0.5.177
func (*PodIsReadyReplay) Descriptor() ([]byte, []int)
Deprecated: Use PodIsReadyReplay.ProtoReflect.Descriptor instead.
func (*PodIsReadyReplay) GetReady ¶ added in v0.5.177
func (x *PodIsReadyReplay) GetReady() bool
func (*PodIsReadyReplay) ProtoMessage ¶ added in v0.5.177
func (*PodIsReadyReplay) ProtoMessage()
func (*PodIsReadyReplay) ProtoReflect ¶ added in v0.5.177
func (x *PodIsReadyReplay) ProtoReflect() protoreflect.Message
func (*PodIsReadyReplay) Reset ¶ added in v0.5.177
func (x *PodIsReadyReplay) Reset()
func (*PodIsReadyReplay) String ¶ added in v0.5.177
func (x *PodIsReadyReplay) String() string
type SendCrcListReplay ¶ added in v0.5.177
type SendCrcListReplay struct { IpFromSender string `protobuf:"bytes,1,opt,name=IpFromSender,proto3" json:"IpFromSender,omitempty"` ListOfDataToBeSentToRemotePod [][]byte `protobuf:"bytes,2,rep,name=ListOfDataToBeSentToRemotePod,proto3" json:"ListOfDataToBeSentToRemotePod,omitempty"` // contains filtered or unexported fields }
func (*SendCrcListReplay) Descriptor
deprecated
added in
v0.5.177
func (*SendCrcListReplay) Descriptor() ([]byte, []int)
Deprecated: Use SendCrcListReplay.ProtoReflect.Descriptor instead.
func (*SendCrcListReplay) GetIpFromSender ¶ added in v0.5.177
func (x *SendCrcListReplay) GetIpFromSender() string
func (*SendCrcListReplay) GetListOfDataToBeSentToRemotePod ¶ added in v0.5.177
func (x *SendCrcListReplay) GetListOfDataToBeSentToRemotePod() [][]byte
func (*SendCrcListReplay) ProtoMessage ¶ added in v0.5.177
func (*SendCrcListReplay) ProtoMessage()
func (*SendCrcListReplay) ProtoReflect ¶ added in v0.5.177
func (x *SendCrcListReplay) ProtoReflect() protoreflect.Message
func (*SendCrcListReplay) Reset ¶ added in v0.5.177
func (x *SendCrcListReplay) Reset()
func (*SendCrcListReplay) String ¶ added in v0.5.177
func (x *SendCrcListReplay) String() string
type SendCrcListRequest ¶ added in v0.5.177
type SendCrcListRequest struct { IpFromSender string `protobuf:"bytes,1,opt,name=IpFromSender,proto3" json:"IpFromSender,omitempty"` DataIntegrityChecker [][]byte `protobuf:"bytes,2,rep,name=DataIntegrityChecker,proto3" json:"DataIntegrityChecker,omitempty"` // contains filtered or unexported fields }
func (*SendCrcListRequest) Descriptor
deprecated
added in
v0.5.177
func (*SendCrcListRequest) Descriptor() ([]byte, []int)
Deprecated: Use SendCrcListRequest.ProtoReflect.Descriptor instead.
func (*SendCrcListRequest) GetDataIntegrityChecker ¶ added in v0.5.177
func (x *SendCrcListRequest) GetDataIntegrityChecker() [][]byte
func (*SendCrcListRequest) GetIpFromSender ¶ added in v0.5.177
func (x *SendCrcListRequest) GetIpFromSender() string
func (*SendCrcListRequest) ProtoMessage ¶ added in v0.5.177
func (*SendCrcListRequest) ProtoMessage()
func (*SendCrcListRequest) ProtoReflect ¶ added in v0.5.177
func (x *SendCrcListRequest) ProtoReflect() protoreflect.Message
func (*SendCrcListRequest) Reset ¶ added in v0.5.177
func (x *SendCrcListRequest) Reset()
func (*SendCrcListRequest) String ¶ added in v0.5.177
func (x *SendCrcListRequest) String() string
type SyncCacheDaraServerClient ¶ added in v0.5.177
type SyncCacheDaraServerClient interface { GrpcFuncPodIsReady(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*PodIsReadyReplay, error) // SendCrcList: // O servidor A envia a chave e o CRC do dado para todos os dados arquivados em memória ao servidor B // FieldIntegrityChecker -> Key: populada; Crc: populado; DataToMemory: nil // A: O servidor B não encontra a chave e devolve a chave recebida pelo servidor A e um flag de NotFound // DataToMemoryFromRemotePod -> Key: populado; Data: nil; NotFound: true // O servidor A recebe a informação e envia FieldIntegrityChecker novamente // FieldIntegrityChecker -> Key: populado; Crc: nil; DataToMemory: populado // O servidor B recebe o dado e arquiva // B: O servidor B tem o mesmo CRC para a chave e não faz nada; // C: O servidor B tem um CRC diferente e envia DataToMemoryFromRemotePod // DataToMemoryFromRemotePod -> Key: populado; Data: populado; NotFound: false GrpcFuncSendCrcList(ctx context.Context, in *SendCrcListRequest, opts ...grpc.CallOption) (*SendCrcListReplay, error) }
SyncCacheDaraServerClient is the client API for SyncCacheDaraServer service.
For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
func NewSyncCacheDaraServerClient ¶ added in v0.5.177
func NewSyncCacheDaraServerClient(cc grpc.ClientConnInterface) SyncCacheDaraServerClient
type SyncCacheDaraServerServer ¶ added in v0.5.177
type SyncCacheDaraServerServer interface { GrpcFuncPodIsReady(context.Context, *Empty) (*PodIsReadyReplay, error) // SendCrcList: // O servidor A envia a chave e o CRC do dado para todos os dados arquivados em memória ao servidor B // FieldIntegrityChecker -> Key: populada; Crc: populado; DataToMemory: nil // A: O servidor B não encontra a chave e devolve a chave recebida pelo servidor A e um flag de NotFound // DataToMemoryFromRemotePod -> Key: populado; Data: nil; NotFound: true // O servidor A recebe a informação e envia FieldIntegrityChecker novamente // FieldIntegrityChecker -> Key: populado; Crc: nil; DataToMemory: populado // O servidor B recebe o dado e arquiva // B: O servidor B tem o mesmo CRC para a chave e não faz nada; // C: O servidor B tem um CRC diferente e envia DataToMemoryFromRemotePod // DataToMemoryFromRemotePod -> Key: populado; Data: populado; NotFound: false GrpcFuncSendCrcList(context.Context, *SendCrcListRequest) (*SendCrcListReplay, error) // contains filtered or unexported methods }
SyncCacheDaraServerServer is the server API for SyncCacheDaraServer service. All implementations must embed UnimplementedSyncCacheDaraServerServer for forward compatibility
type UnimplementedSyncCacheDaraServerServer ¶ added in v0.5.177
type UnimplementedSyncCacheDaraServerServer struct { }
UnimplementedSyncCacheDaraServerServer must be embedded to have forward compatible implementations.
func (UnimplementedSyncCacheDaraServerServer) GrpcFuncPodIsReady ¶ added in v0.5.177
func (UnimplementedSyncCacheDaraServerServer) GrpcFuncPodIsReady(context.Context, *Empty) (*PodIsReadyReplay, error)
func (UnimplementedSyncCacheDaraServerServer) GrpcFuncSendCrcList ¶ added in v0.5.177
func (UnimplementedSyncCacheDaraServerServer) GrpcFuncSendCrcList(context.Context, *SendCrcListRequest) (*SendCrcListReplay, error)
type UnsafeSyncCacheDaraServerServer ¶ added in v0.5.177
type UnsafeSyncCacheDaraServerServer interface {
// contains filtered or unexported methods
}
UnsafeSyncCacheDaraServerServer may be embedded to opt out of forward compatibility for this service. Use of this interface is not recommended, as added methods to SyncCacheDaraServerServer will result in compilation errors.
Source Files ¶
- doc.go
- funcConvertReflectMapIntoStruct.go
- funcConvertReflectValueToPointer.go
- funcDelete.go
- funcDeleteAll.go
- funcGet.go
- funcGetAll.go
- funcGetTotal.go
- funcGetTotalIsGreaterThanZero.go
- funcGetTypeMap.go
- funcGetTypeOfMapContent.go
- funcGetTypeOfMapKey.go
- funcGetValueOfData.go
- funcGetYypeOfData.go
- funcInit.go
- funcIsTypeMap.go
- funcIsTypePtr.go
- funcNew.go
- funcSet.go
- funcSetAll.go
- funcSetKeyValue.go
- funcSetMany.go
- server.go
- typeGrpc.pb.go
- typeGrpc_grpc.pb.go
- typeMemory.go