queue

package
v0.0.0-...-b7a815f Latest Latest
Warning

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

Go to latest
Published: Nov 30, 2021 License: MIT Imports: 8 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func IsIn

func IsIn(str string, array []string) bool

func ParseAck

func ParseAck(messageId string) (string, uint64, error)

ParseAck:

dato un id di un messaggio ne ricava il mittente e il suo clock.
Un ID di un messaggio è della forma "mittente:clock"
es: "user:24"

Types

type AckTable

type AckTable struct {
	// contains filtered or unexported fields
}

func NewAckTracker

func NewAckTracker() *AckTable

func (*AckTable) GetNumAcks

func (table *AckTable) GetNumAcks() int

func (*AckTable) Insert

func (table *AckTable) Insert(messageId string)

type MessageHeap

type MessageHeap []*pb.MessageLC

func (MessageHeap) IsEmpty

func (queue MessageHeap) IsEmpty() bool

func (MessageHeap) Len

func (queue MessageHeap) Len() int

func (MessageHeap) Less

func (queue MessageHeap) Less(i, j int) bool

func (MessageHeap) Peek

func (queue MessageHeap) Peek() *pb.MessageLC

func (*MessageHeap) Pop

func (queue *MessageHeap) Pop() interface{}

func (*MessageHeap) Push

func (queue *MessageHeap) Push(x interface{})

func (MessageHeap) Swap

func (queue MessageHeap) Swap(i, j int)

type MessageLCFIFO

type MessageLCFIFO struct {
	// contains filtered or unexported fields
}

func NewMessageLCFifo

func NewMessageLCFifo() *MessageLCFIFO

func (*MessageLCFIFO) Len

func (queue *MessageLCFIFO) Len() int

func (*MessageLCFIFO) Pop

func (queue *MessageLCFIFO) Pop() *api.MessageLC

func (*MessageLCFIFO) Push

func (queue *MessageLCFIFO) Push(message *api.MessageLC)

type MessageLCRecvQueue

type MessageLCRecvQueue struct {
	// contains filtered or unexported fields
}

func NewMessageLCRecvQueue

func NewMessageLCRecvQueue(groups []string, verbose bool) *MessageLCRecvQueue

func (*MessageLCRecvQueue) IsEmpty

func (queue *MessageLCRecvQueue) IsEmpty() bool

func (*MessageLCRecvQueue) Len

func (queue *MessageLCRecvQueue) Len() int

func (*MessageLCRecvQueue) Pop

func (queue *MessageLCRecvQueue) Pop() *pb.MessageLC

Pop:

Controlla se vi sono messaggi nella coda.
Se il messaggio in cima alla coda risulta pronto per essere rilasciato
allora la coda lo rilascia
in caso negativo questo metodo ritorna null.
null indica che la coda non ha messaggi da rilasciare.

func (*MessageLCRecvQueue) Push

func (queue *MessageLCRecvQueue) Push(message *pb.MessageLC) error

Push:

Inserisci il fatto che un nuovo messaggio è arrivato nella message table
se il messaggio non è un ack inseriscilo nella coda finale.
il metodo è thread safe.

type MessageTable

type MessageTable struct {
	// contains filtered or unexported fields
}

func NewMessageTable

func NewMessageTable(groupsize int) *MessageTable

func (*MessageTable) Insert

func (table *MessageTable) Insert(message *api.MessageLC) error

Il metodo Insert() rappresenta il cuore della message table. Se un messaggio arriva ho 4 possibili casi dati dalle risposte a due domande:

  1. Il messaggio è un ack?
  2. Il messaggio è gia stato registrato?

Se il messaggio non è un ack e non è stato registrato:

allora creo una nuova entry nella tabella con le informazioni del messaggio e ritorno

Se il messaggio è un ack e il messaggio a cui risponde è registrato:

aggiorno le informazioni dell messaggio, indicando che ha ricevuto un nuovo ack.

Se il messaggio è un ack e il messaggio a cui risponde non è registrato:

ho un caso in cui mi è arrivato prima l'ack di un messaggio del messaggio stesso.
In questo caso devo creare nella tabella una entry in cui dico: in arrivo c'è un messaggio con clock
dato dall'ack, ma non ho ancora il messaggio stesso.

Se il messaggio non è un ack ed é stato gia registrato:

Questo caso risulta dal caso di sopra, quindi aggiorno l'entry gia esistente con il nuovo messaggio.

func (*MessageTable) IsReady

func (table *MessageTable) IsReady(messageID string) (bool, error)

IsReady:

La funzione IsReady si occupa di stabilire se un messaggio è pronto per essere rilasciato all utente oppure no.
Controlla che il messaggio input abbia ricevuto tutti gli ack e che non ci siano messaggi in arrivo
con clock minore del suo.

func (*MessageTable) Remove

func (table *MessageTable) Remove(messageID string) error

type TableEntry

type TableEntry struct {
	// contains filtered or unexported fields
}

Jump to

Keyboard shortcuts

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