memory

package
v0.5.253 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 22, 2021 License: Apache-2.0 Imports: 23 Imported by: 0

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

Examples

Constants

This section is empty.

Variables

View Source
var File_typeGrpc_proto protoreflect.FileDescriptor
View Source
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) Descriptor() ([]byte, []int)

Deprecated: Use Empty.ProtoReflect.Descriptor instead.

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

func (*Empty) Reset added in v0.5.177

func (x *Empty) Reset()

func (*Empty) String added in v0.5.177

func (x *Empty) String() string

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) DeleteAll added in v0.5.192

func (e *Memory) DeleteAll()

func (*Memory) Get

func (e *Memory) Get(key, dataPointer interface{}) (found bool, err error)

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

func (e *Memory) GetAll(dataPointer interface{}) (err error)

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 (e *Memory) GetCountListOfDataToPrepareAndSendCrcOnlyToRemotePod(ipAddress string) (total int)

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 (e *Memory) GetThisNodeAddress() (IP string)

func (*Memory) GetTotal

func (e *Memory) GetTotal() (total int)

func (*Memory) GetTotalIsGreaterThanZero

func (e *Memory) GetTotalIsGreaterThanZero() (greaterThanZero bool)

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

func (e Memory) GrpcFuncPodIsReady(context.Context, *Empty) (replay *PodIsReadyReplay, err error)

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) New

func (e *Memory) New(option ...interface{}) (Object interface{}, err error)

New

Português: Inicializa o objeto

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

func (e *Memory) Set(key, dataPointer interface{}) (err error)

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

func (e *Memory) SetAll(dataPointer interface{}) (err error)

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

func (e *Memory) SetMany(dataPointer interface{}) (err error)

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

func (e *Memory) SyncIpAddressAdd(key interface{}, ipAddress string)

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

func (e *Memory) SyncIpAddressRemove(key interface{}, ipAddress string)

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

func (e *Memory) SyncIpAddressResetAndSet(key interface{}, ipAddress string)

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) GrpcFuncSendCrcList added in v0.5.177

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.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL